【发布时间】:2011-02-11 07:10:24
【问题描述】:
我的 C# 应用程序中有一个非常奇怪的异常:当尝试反序列化包含泛型 List<IListMember> 的类(其中列表条目由接口指定)时,抛出异常报告“类型 ...IListMember没有标记可序列化属性”(措辞可能略有不同,我的 VisualStudio 不是英文的)。
现在,接口不能是可序列化的;列表中实际包含的类,实现IListMember,是[Serializable];是的,我检查了IListMember 实际上被定义为一个接口,而不是意外地定义为一个类!
我尝试在一个单独的测试项目中重现异常,该项目仅包含包含 List 和成员的类,但它在那里愉快地序列化和反序列化:/
有人对它可能是什么有什么好的想法吗?
编辑:
我们使用的是BinarySerializer;我重复一遍,当提取到测试项目时,该类会愉快地序列化。所以我不需要解决方法来序列化包含List<IThing> 的类,因为通常这工作正常(只要实现IThing 的实际类是可序列化的);我正在寻找的是为什么它可能不在这个特定时间工作......
我现在提出了一种解决方法(单独序列化每个列表成员,连同条目数,并手动重新创建 List),但我真的很想知道它可能是什么以供将来参考。
【问题讨论】:
-
您使用的是什么序列化程序?
BinaryFormatter?XmlSerializer?DataContractSerializer? “鲍勃的本土有机序列化器”?另外 - 是否有任何event参与? -
查看我的编辑;是的,在导致调用 binaryFormatter.Deserialize;你看到有什么联系吗?
-
接口用于确定类是否说它可以序列化,如果你有一个基于接口的引用列表,其中接口没有标记为可序列化,也许序列化代码试图告诉你,你可能在这里有它无法处理的对象?即使您当前的对象图是 A-OK。
-
我不明白这怎么可能是真的,因为接口不能是 [Serializable]。事实上,事实证明并非如此,任何简单的测试都会显示。
标签: c# exception serialization interface