我正在反/序列化一个对象,如下所示:
public class myClass : ISerializable
{
public List<OType> value;
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>));
}
}
列表中的对象does具有可序列化属性。序列化时,不会抛出任何错误,并且列表是never空,但是当反序列化时,我的所有列表都是空的,我不知道为什么。
我将此标记为 CQ 的回答。我能够生成一个小型的一次性测试应用程序,它可以正确地序列化/反序列化我正在尝试使用的对象,但我似乎仍然无法让它在我的生产代码中工作,但我怀疑它是一些小东西,我我失踪了。
当你说你的列表为空时,你的意思是列表本身为空,还是它填充了空条目?如果是后者,那么这是一个已知的 .Net 问题:请参阅我的问题 https://stackoverflow.com/questions/2400805/deserializing-a-class-containing-a-listt-why-is-list-initially-filled-with-nul关于同样的问题。
基本上,List<T>
仅在反序列化时才初始化;它们包含的对象仅在对象图被反序列化后才被反序列化。解决这个问题的一种方法是将任何需要它们的代码放在OnDeserialized
方法,或一种带有[OnDeserializedAttribute]
. See MSDN http://msdn.microsoft.com/en-us/library/system.runtime.serialization.ondeserializedattribute%28v=VS.90%29.aspx.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)