次のようなクラスがあるとします。
[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
にはアドレス フィールドがなかったことです。
注:カスタム シリアライゼーションを使用するのには十分な理由があります。シングルトンとして使用されているいくつかの静的フィールドがあり、デフォルトの逆シリアル化はそれを尊重しません。