自定义.NET序列化似乎不起作用

时间:2009-07-08 12:36:57

标签: .net serialization

我正在使用BinaryFormatter来序列化存储在A中的类System::Collections::Generic::List<A^>^的对象集合。我添加了[Serializable]标记,并在类ISerializable中实现了AGetObjectData和特殊构造函数)。反序列化时,我发现列表被反序列化并包含与序列化相同数量的元素。但是,每个元素都是空引用。

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

我还将System::Collections::Generic::List<A^>^替换为array<A^>^,我仍然得到相同的结果。数组具有正确数量的元素,但每个元素都是空引用。

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

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:0)

根据您的描述,您的列表中的项目可能是不可序列化的;如果您可以控制该类,您可以验证它是否也被标记为可序列化?

另外,您是否尝试过使用XmlFormatter来直观地检查序列化数据以查看它是如何构建的?它可以提供一些有关在序列化或反序列化期间是否出现问题的见解。