2009-07-20 15 views
3

私のクラスでXMLシリアル化をテストしていますが、プログラムを実行したときにID番号が保存されていないことに気付きました。XMLシリアル化でプロパティを読み書きする必要がありますか?

私はいくつかのことを考えていましたが、何も働かなかったので、ID以外のすべてのフィールドがプロパティを取得して設定していました。だから私はセットを追加した。私のID番号へのプロパティとそれが働いていた。 質問は、設定する必要がありますか?そして得る。 XML Serializationのすべてのプロパティで機能するようになりましたか?

ID番号は、オブジェクトが作成された後(自動的に生成された後)には変更したくありません。

答えて

5

はい、これは基本的にXMLシリアル化の制限です。 XML Serialization docs

は、シリアル化することができます。プロパティには パブリックアクセサが必要です( メソッドを取得して設定する)。 非公開データをシリアル化する必要がある場合は、 シリアル化ではなく BinaryFormatterクラスを使用してください。

XMLシリアル化は、柔軟性がない可能性があります。

+0

彼は、彼が使用していたフレームワークのバージョンについては言及していないことに気付きました。これは.NET 3.5では変更されていませんか? –

+0

@Justin - AFAIKではありません。 –

+0

これはMSDNからの逐語的な引用であるかもしれませんが、私は必ずしもXMLが前のオプションであったそれらのシナリオの代わりにBinarySerializerを推奨しません... –

0

xmlとして非公開データをシリアル化する場合は、DataContractSerializerが便利であることに注意してください。それはXmlSerializerほど柔軟ではない(そして、あなたは属性を指定することはできません)、それは非パブリックデータをシリアル化することができます

[DataContract] 
public class Person { 
    [DataMember] 
    private int id; 

    public int Id {get {return id;}} // immutable 

    public Person(int id) { this.id = id; } 

    [DataMember] 
    public string Name {get;set;} // mutable 
} 

も注意してください、それはあなたのコンストラクタを使用して...または実際ないこと任意のコンストラクタ - それは、オブジェクトを作成し、後でデータを埋めることができます。

関連する問題