2012-02-02 14 views
9

シリアライズ属性で永続化したいたくさんのコードとマーキングクラスを行っています。私はまだバイナリのシリアライゼーション/デセル化エンジンを書いていないので、完成したら私自身の質問に答えてくれるはずです! - それでも問題がなければ、以前の回答を取ってみようと思った。自動実装されたプロパティとシリアライゼーション

public string Id 
    { 
     get; 
     set; 
    } 

"Id"はシリアル化されていますか?私は、コンパイラの下に自動的にクラスメンバを作成することを理解しますが、クラスインスタンスのすべてのデータメンバがストレージに書き込まれるため、これは正しくシリアル化されますか?プロパティにSerialized/NonSerialized属性を置くことができないので、そうは思われません。

ありがとうございます。

+1

"どのようなシリアライズを使用するかによって異なります"ランタイムシリアライゼーション、XMLシリアライゼーション、データコントラクトシリアライゼーションはすべてこの点で異なります。 –

+0

クラスをシリアル化する方法を教えてください。 –

+0

@ジョン:バイナリシリアル化を使用するつもりです – Jeb

答えて

8

あなたは非直列化可能であるとしてイベントのバッキングフィールドをマークする[field:NonSerialized]属性を使用することができ、しかし自動プロパティを持つことができないようです。自動プロパティを使用すると、バッキングフィールドがシリアル化され、その動作を防止する唯一の方法は、通常のプロパティに変換し、明示的なバッキングフィールドに通常通り[NonSerialized]という注釈を付けることです。

2

@Johnがコメントで指摘したように、BinaryFormatterSystem.Runtime.Serialization.Formatters.Binary)は、自動生成バッキングフィールドをシリアル化します。 ISerializableインターフェイスを実装してカスタムシリアル化を使用して、どの値がシリアル化されているかどうかをクラスで判断できます。

関連する問題