我正在使用BinaryFormatter
来序列化存储在A
中的类System::Collections::Generic::List<A^>^
的对象集合。我添加了[Serializable]
标记,并在类ISerializable
中实现了A
(GetObjectData
和特殊构造函数)。反序列化时,我发现列表被反序列化并包含与序列化相同数量的元素。但是,每个元素都是空引用。
我已经检查了抛出的异常,并确定情况并非如此。我已经检查过以确保在反序列化期间调用A(SerializationInfo ^info, StreamingContext context)
形式的特殊构造函数的次数正确,但是这些重构的对象是而不是从反序列化的集合中引用。
我还将System::Collections::Generic::List<A^>^
替换为array<A^>^
,我仍然得到相同的结果。数组具有正确数量的元素,但每个元素都是空引用。
任何看过类似问题的人?有线索吗?
答案 0 :(得分:3)
问题是在GetValue
调用之后,子对象中引用的任何对象都不需要立即完全反序列化。在我的例子中,通用List
尚未完全反序列化,因此只包含空引用。在对象图完全反序列化后,我终于使用IDeserializationCallback
来执行代码。
答案 1 :(得分:0)
根据您的描述,您的列表中的项目可能是不可序列化的;如果您可以控制该类,您可以验证它是否也被标记为可序列化?
另外,您是否尝试过使用XmlFormatter来直观地检查序列化数据以查看它是如何构建的?它可以提供一些有关在序列化或反序列化期间是否出现问题的见解。