【发布时间】:2011-02-11 13:29:31
【问题描述】:
我试图序列化一个自定义类型,该类型在其他成员中包含一个字典。与字典的键和值关联的类型是实现的接口。
字典看起来像
Dictionary<ITypeA, ITypeA>
TypeA implements ITypeA,
SubTypeOfA inherits from TypeA
SubTypeOfB inherits from SubTypeOfA
伪代码如下所示:
List<Type> knownTypes = new List<Type>() {
typeof(TypeA),
typeof(SubTypeOfA),
typeof(SubTypeOfB)
};
DataContractSerializer serializer =
new DataContractSerializer(typeof(DataHolder), knownTypes);
using (FileStream fs = new FileStream(completeFilePath, FileMode.Create))
{
serializer.WriteObject(fs, templateData);
success = true;
}
当 WriteObject() 被调用时,我得到了 StackOverflowException,我对导致这种情况发生的原因一无所知。
层次结构中的所有类都用[DataContract]修饰,要序列化的成员用[DataMember]修饰。
任何帮助将不胜感激。
【问题讨论】:
-
第一次调用时你会得到这个异常吗?
-
什么是
DataHolder?templateData是什么?除了继承之外,其他类型还包括什么? -
另外,
StackOverflowException的信息是什么?它是否为您提供了有关问题所在的任何线索? -
每次都抛出异常。 TemplateData 是一种自定义类型,其中包含要序列化的数据,它包含一个字典以及其他对象。该消息本身并没有说明任何有用的信息,您甚至无法获得 StackOverflowException 的堆栈跟踪,因为此时系统并不处于稳定状态。
标签: c# datacontractserializer stack-overflow