【发布时间】:2009-07-08 12:36:56
【问题描述】:
我正在使用BinaryFormatter 序列化存储在System::Collections::Generic::List<A^>^ 中的A 类对象的集合。我添加了[Serializable] 标签并在A 类中实现了ISerializable(GetObjectData 和特殊构造函数)。反序列化时,我发现列表已反序列化,并且包含与序列化相同数量的元素。但是,这些元素中的每一个都是空引用。
我检查了抛出的异常,并确定不是这种情况。我已经检查以确保在反序列化过程中,A(SerializationInfo ^info, StreamingContext context) 形式的特殊构造函数被调用了正确的次数,但是这些重新构造的对象没有从反序列化的集合中被引用。
我还用array<A^>^ 替换了System::Collections::Generic::List<A^>^,我仍然得到相同的结果。该数组具有正确数量的元素,但每个元素都是空引用。
有人遇到过类似问题吗?有什么线索吗?
【问题讨论】:
-
破解代码示例对于这类问题总是很方便
-
在您的 GetObjectData 方法中,您是否在列表中调用 ToArray()?过去,当我试图过度思考序列化过程并得到同样的行为时,我曾犯过这个错误。
-
Kleinux,我没有调用 ToArray(),但我确实尝试过一次,看看它是否会起作用。没有这样的运气。
-
@Sam,源代码是专有的,我不能在这里发布。我试图重新创建行为样本,但所有样本都完美运行!我想知道默认的序列化行为是否已在程序早期的某个地方以某种方式修改/覆盖。
标签: .net serialization