あなたはデフォルト値を設定することができどこデシリアライズした後に実行するメソッドを指定することができます。
using System.Runtime.Serialization;
[Serializable]
class Car
{
public int Id { get; set; }
public string Make { get; set; }
public int Doors { get; set; }
public string Foo { get; set; } // added property
...
[OnDeserialized()]
internal void OnDeserializedMethod(StreamingContext context)
{
if (string.IsNullOrEmpty(this.Foo))
this.Foo = "Ziggy";
}
}
あなたはデータコントラクトバイナリシリアライザでいるProtobuf-NETを検討する必要があります。これらのこと、選択肢が増え、スピードが速く、出力が小さくなります。私は確かにダブルチェックし、ProtoBufは情報を持っていないフィールドを元に戻しません。だから、:
[ProtoContract]
class Car
{
[ProtoMember(1)]
public int Id { get; set; }
[ProtoMember(2)]
public string Make { get; set; }
[ProtoMember(3)]
public int Doors { get; set; }
[ProtoMember(4)]
public string Foo { get; set; } // new prop
public Car()
{
this.Foo = "Ziggy";
}
...
}
Foo
にはシリアル化された値が存在しない場合は、CTORから古い値が保持されます。だから、そこに新しいプロパティを初期化し、nullにリセットされる心配はありません。 Bitmap
、Font
、Rectangle
のような多くのプロパティをお持ちの場合は、BinaryFormatter
に泊まりたい場合があります。
シリアライザによって異なります – Plutonix
BinaryFormatterを使用してバイナリシリアル化を行っています。 – Christoffer