2014-02-01 4 views
1

Я переводил код Java на C#. Код Java выглядит какРазница между Java Serializable и C# ISerializable

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 интерфейса был реализован и Сериализуемый не имеет методов, чтобы ничто не должно осуществляться оттуда.

В C# мой класс выглядит примерно так:

public class myClass : ISerializable, ICloneable{ 

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

public abstract Object Clone(); 

//... 
//... 

}

Как вы можете видеть, метод ICloneable был реализован, но в C#, в отличие от Сериализуемый, интерфейс ISerializable в Java ДЕЙСТВИТЕЛЬНО есть метод, поэтому мне нужно его реализовать. Проблема в том, что я не уверен, как, поскольку я переводил этот код с Java, и это не нужно делать там.

Может кто-нибудь, пожалуйста, дайте мне знать, как это сделать на C#?

Я знаю, что отсутствует метод GetObjectData, но я понятия не имею, как ее реализовать, что пройти к нему, или то, что должно быть внутри него, так как это полностью отсутствует в эквиваленте Java ...

ответ

2

Я предполагаю, что вы использовали интерфейс Serializable в Java, чтобы сообщить, что ваш класс может быть сериализован. В .Net вы должны использовать для этого атрибут [Serializable], интерфейс ISerializable имеет немного другое значение.

Так в .NET код должен выглядеть следующим образом:

[Serializable] 
public class myClass : ICloneable 
{ 

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

    public abstract Object Clone(); 

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

Смотрите также:

Смежные вопросы