【问题标题】:Difference between Java's Serializable and C#'s ISerializableJava 的 Serializable 和 C# 的 ISerializable 的区别
【发布时间】:2014-02-25 15:07:06
【问题描述】:

我正在将一些 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 等效项中完全没有......

【问题讨论】:

    标签: c# java serialization translation clone


    【解决方案1】:

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

    所以在 .Net 中,您的代码应如下所示:

    [Serializable]
    public class myClass : ICloneable
    {
    
        //fields, constructors etc here.
        //...
        //...
    
        public abstract Object Clone ();
    
        //...
        //...
    }
    

    【讨论】:

      【解决方案2】:

      在 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!";
          }
      

      另见:

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-01-22
        • 2011-09-20
        • 1970-01-01
        • 2011-03-20
        • 1970-01-01
        • 1970-01-01
        • 2012-01-21
        相关资源
        最近更新 更多