次のようなクラスがあるとします。
[Serializable]
public class MyClass {
string name;
string address;
public MyClass(SerializationInfo info, StreamingContext context){
name = info.GetString("name");
if(/* todo: check if a value for address exists */)
address = info.GetString("address");
}
public void GetObjectData(SerializationInfo info, StreamingContext context){
info.AddValue(name);
if(address != null)
info.AddValue(address);
}
}
addressを呼び出す前に、フィールドの値が存在するかどうかをテストするにはどうすればよいinfo.GetString(address)ですか?
はい、単純にヌルaddressフィールドを記述できることは理解していますが、実際の問題は、以前のバージョンのMyClassにはアドレス フィールドがなかったことです。
注:カスタム シリアライゼーションを使用するのには十分な理由があります。シングルトンとして使用されているいくつかの静的フィールドがあり、デフォルトの逆シリアル化はそれを尊重しません。