Java的Serializable和C#的ISerializable之间的区别

时间:2014-02-01 23:43:27

标签: c# java serialization translation clone

我正在将一些Java代码翻译成C#。 Java代码看起来像

public abstract class myClass implements Cloneable, Serializable {

//fields, constructors etc here.
//...
//...

public abstract Object clone(); //an implementation of this is eventually provided 
in a subclass

//...
//...

}

实现了Cloneable接口的clone(),并且Serializable没有方法,所以不需要从那里实现任何东西。

在C#中,我的课程看起来像这样:

public class myClass : ISerializable, ICloneable{

//fields, constructors etc here.
//...
//...

public abstract Object Clone ();

//...
//...

}

正如您所看到的,ICloneable的方法已经实现,但在C#中,与Java的Serializable不同,ISerializable接口有一个方法,所以我需要实现它。问题是我不确定如何,因为我正在从Java翻译这个代码,而且这不需要在那里完成。

有人可以告诉我如何在C#中执行此操作吗?

我知道缺少的方法是GetObjectData,但我不知道如何实现它,传递给它的内容,或者内部应该包含的内容,因为在Java等价物中完全没有...

2 个答案:

答案 0 :(得分:3)

在Java中,声明一个类“实现Serializable”将该类标记为“Serializable”。 Java接口是标记。

在C#中,您可以通过使用.Net“Serializable”属性标记类来完成等效项:

实施例

// A test object that needs to be serialized.
[Serializable()]        
public class TestSimpleObject  {

    public int member1;
    public string member2;
    public string member3;
    public double member4;

    // A field that is not serialized.
    [NonSerialized()] public string member5; 

    public TestSimpleObject() {

        member1 = 11;
        member2 = "hello";
        member3 = "hello";
        member4 = 3.14159265;
        member5 = "hello world!";
    }

另见:

答案 1 :(得分:2)

我假设您已经使用Java中的Serializable接口来通知您的类可以被序列化。在.Net中,您应该使用[Serializable]属性,ISerializable接口具有不同的含义。

所以在.Net中你的代码应该是这样的:

[Serializable]
public class myClass : ICloneable
{

    //fields, constructors etc here.
    //...
    //...

    public abstract Object Clone ();

    //...
    //...
}