リストは最初は常に空ですが、設定していmyClass.value = new List<...>();
ますか?また、データが実際に保存されていることを確認できるように、シリアル化されたデータをバイナリ形式と xml 形式の両方で保存しましたか?
2.0 以降を使用している場合、絶対シリアル化を制御する必要がない場合は ISerializable を実装する必要はありません。値をパブリック プロパティに変更すると、独自にシリアル化されます。
編集:次のケースは、私にとっては正常にシリアル化および逆シリアル化されているようです。質問全体を誤解している場合に備えて、これを投稿しています。
厄介なテストコードを無視して、これが少し役立つことを願っています.
[Serializable]
public class OType
{
public int SomeIdentifier { get; set; }
public string SomeData { get; set; }
public override string ToString()
{
return string.Format("{0}: {1}", SomeIdentifier, SomeData);
}
}
[Serializable]
public class MyClass : ISerializable
{
public List<OType> Value;
public MyClass() { }
public MyClass(SerializationInfo info, StreamingContext context)
{
this.Value = (List<OType>)info.GetValue("value", typeof(List<OType>));
}
void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context)
{
info.AddValue("value", Value, typeof(List<OType>));
}
}
...
var x = new MyClass();
x.Value = new OType[] { new OType { SomeIdentifier = 1, SomeData = "Hello" }, new OType { SomeIdentifier = 2, SomeData = "World" } }.ToList();
var xSerialized = serialize(x);
Console.WriteLine("Serialized object is {0}bytes", xSerialized.Length);
var xDeserialized = deserialize<MyClass>(xSerialized);
Console.WriteLine("{0} {1}", xDeserialized.Value[0], xDeserialized.Value[1]);
出力を忘れた..
シリアル化されたオブジェクトは 754 バイトです
1: ハロー 2: ワールド