2012-05-08 10 views
3

どうすればいいですか生徒クラスはシリアライズ可能ですか?私はこれをarticleと読んでいますが、もし私が下のシナリオでそれを実装するのであれば、私は正しいアプローチがわかりません。Serializableクラス

public class Student 
{ 
    private string _studentNumber; 
    private string _lastName; 
    private string _firtName; 
    private List<Subject> _subjects; 

    public Student() { } 

    public string StudentNumber 
    { 
     get { return _studentNumber; } 
     set { _studentNumber = value; } 
    } 

    public string LastName 
    { 
     get { return _lastName; } 
     set { _lastName = value; } 
    } 

    public string FirstName 
    { 
     get { return _firtName; } 
     set { _firtName = value; } 
    } 

    public List<Subject> Subjects 
    { 
     get { return _subjects; } 
     set { _subjects = value; } 
    } 
} 

public class Subject 
{ 
    private string _subjectCode; 
    private string _subjectName; 

    public Subject() { } 

    public string SubjectCode 
    { 
     get { return _subjectCode; } 
     set { _subjectCode = value; } 
    } 

    public string SubjectName 
    { 
     get { return _subjectName; } 
     set { _subjectName = value; } 
    } 
} 
+3

シリアライズ可能なようにそれを呼び出す

[Serializable()] public class Student { // Your Class } 

を使用することができますあなたの場合は

** **シリアライザによって? –

+0

また、C#3コンパイラを使用していて、.NET 2.0をターゲットにしている場合は、自動的に実装されたプロパティを使用して、いくつかの入力を省くことができます。** **しかし** note:これは 'BinaryFormatter'自動的に実装されたプロパティに変更すると互換性があります) –

+0

申し訳ありませんが、これにはあまりよく慣れていませんが、私はこの記事を参照しています。私の質問と同じように見えます:http://stackoverflow.com/questions/364253/how-to-deserialize-xml-document – yonan2236

答えて

9

BinaryFormatterについて、ちょうどXmlSerializer、何のためにpublic class ....

[Serializable]を追加します。それは細かいクラスに[DataContract]を追加し、あなたが要素DataContractSerializerについては

(厳密に3.0クラスを、)したいと仮定し、かついるProtobufネットのプロパティ

[DataMember]を動作するはずです、あなたはとしてDataContractSerializer属性を使用することができます[DataMember]には一意のOrder=が指定されているか、クラスには[ProtoContract]、各プロパティには[ProtoMember(n)]を使用できます。一意のnです。 JavaScriptSerializerについては

(技術的には3.5)、何も - それはJson.NETについて

を動作するはずです、何も - それは

その他のオプションはISerializableまたはIXmlSerializableを実施したが、率直に言って含まれるであろう動作するはずです:あなたはそれを必要としません。

+0

情報オーバーロード:) – yonan2236

+0

@ yonan2236 heh;しかし、それは重要な点を強調しています:利用可能な複数のシリアライザがあり、それぞれが異なる規則と形式を持っています。 –

+0

もう一度やり直します。私はあなたに戻ってきます。 – yonan2236

2

通常、私はIClonenableインターフェイスを実装せずにオブジェクトのディープコピーを作成するためにシリアル化します。あなたが拡張メソッド

public static class ExtensionMethod 
{ 
    public static T DeepClone<T>(this T element) 
    { 
     MemoryStream m = new MemoryStream(); 
     BinaryFormatter b = new BinaryFormatter(); 
     b.Serialize(m, element); 
     m.Position = 0; 
     return (T)b.Deserialize(m); 
    } 
} 

を作り、

yourclassobject.DeepClone(); 
関連する問題