一开始列表总是为空,你是通过 myClass.value = new List<...>();
来设置它的吗?同时,你是否将序列化数据保存为二进制和xml格式,以便可以验证数据是否实际上已被保存?
还有一点需要注意的是,如果你使用2.0+版本,如果不需要控制绝对序列化,你不必实现ISerializable接口,只需将value更改为公共属性即可自动进行序列化。
编辑:对于我来说,以下情况似乎可以正常序列化和反序列化,我发布这篇文章是因为我可能误解了整个问题。
忽略糟糕的测试代码,希望这能有所帮助。
[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:世界