2009-07-08 48 views
2

我正在使用BinaryFormatter序列化存储在System::Collections::Generic::List<A^>^中的类A的对象集合。我添加了[Serializable]标签,并在类A(均为GetObjectData和特殊构造函数)中实施了ISerializable。反序列化时,我发现该列表是反序列化的,并包含与序列化相同数量的元素。但是,这些元素中的每一个都是空引用。自定义.NET序列化似乎不起作用

我检查了抛出的异常,并确定它不是这种情况。我已经检查确保在反序列化期间A(SerializationInfo ^info, StreamingContext context)形式的特殊构造函数被称为正确的次数,但是这些重新构造的对象是从反序列化集合中引用的而不是

我也用array<A^>^取代了System::Collections::Generic::List<A^>^,我仍然得到相同的结果。该数组具有正确数量的元素,但每个元素都是空引用。

任何人看过类似的问题?任何线索?

+1

示例破碎的代码对于这类问题总是很方便 – 2009-07-08 12:39:54

+0

在您的GetObjectData方法中,您是否在列表中调用ToArray()?当我试图过度考虑序列化过程并得到同样的行为时,我犯了过去的错误。 – Kleinux 2009-07-08 12:54:51

回答

3

问题是在子对象内引用的任何对象都不需要在调用GetValue后立即完全反序列化。就我而言,通用List尚未完全反序列化,因此只包含空引用。在对象图完全反序列化之后,我终于使用IDeserializationCallback来执行代码。

0

从您的描述中,它听起来像您的列表中的项目可能是不可序列化的;如果你能控制这个类,你可以验证它是否也被标记为可序列化的?

此外,您是否尝试过使用XmlFormatter可以直观地检查序列化数据以查看它是如何构建的?它可能会提供一些有关该序列化或反序列化过程中是否出现问题的信息。