C# 序列化期间的StackOverFlowException

C# 序列化期间的StackOverFlowException,c#,datacontractserializer,stack-overflow,C#,Datacontractserializer,Stack Overflow,我正在尝试序列化一个在其他成员中包含字典的自定义类型。与字典的键和值关联的类型是实现的接口 这本字典看起来像 Dictionary<ITypeA, ITypeA> TypeA implements ITypeA, SubTypeOfA inherits from TypeA SubTypeOfB inherits from SubTypeOfA 字典 TypeA实现了ittypea, 子类型A继承自类型A 子类型B继承自子类型A 伪代码如下所示:

我正在尝试序列化一个在其他成员中包含字典的自定义类型。与字典的键和值关联的类型是实现的接口

这本字典看起来像

 Dictionary<ITypeA, ITypeA> 

TypeA implements ITypeA, 
SubTypeOfA inherits from TypeA
SubTypeOfB inherits from SubTypeOfA
字典
TypeA实现了ittypea,
子类型A继承自类型A
子类型B继承自子类型A
伪代码如下所示:

            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;
            }
List knownTypes=new List(){
typeof(TypeA),
类型(亚型),
类型(子类型B)
};
DataContractSerializer序列化程序=
新的DataContractSerializer(typeof(DataHolder),knownTypes);
使用(FileStream fs=newfilestream(completeFilePath,FileMode.Create))
{
serializer.WriteObject(fs,templateData);
成功=真实;
}
当调用WriteObject()时,我得到一个StackOverflowException,我不知道是什么导致了这种情况

层次结构中的所有类都用[DataContract]修饰,要序列化的成员用[DataMember]取消创建


任何帮助都将不胜感激。

如果您在图表中有一个循环,我可能会期望出现类似的情况,但不知何故,没有检测到对象标识失败。所谓循环,我的意思是:

using System.Runtime.Serialization;
[DataContract] class Foo {
    public Foo() { Bar = this; }
    [DataMember] public Foo Bar { get; set; }
    static void Main() {
        new DataContractSerializer(typeof(Foo)).WriteObject(
            System.IO.Stream.Null, new Foo());
    }
}
这会引发错误:

类型“Foo”的对象图包含循环,如果禁用引用跟踪,则无法序列化

这是因为它试图遍历树(而不是图形),并注意到重复(相同的对象引用),然后停止。然而,通过测试上述内容(并查看何时调用
get
),看起来DCS实际上是通过发现疼痛来做到这一点的——中止前的深度非常高


在本地,我收到了528个调用
Bar
,然后它就死了。如果堆栈中已经有复杂的代码位于此之上,那么肯定会导致堆栈溢出。

第一次调用此异常时是否会出现此异常?什么是
DataHolder
?什么是
模板数据
?除了继承之外,其他类型由什么组成?还有,
StackOverflowException
的消息是什么?它是否为您提供了错误的线索?每次都会抛出异常。TemplateData是一种自定义类型,它具有要序列化的数据,它包含一个字典和其他对象。消息本身没有说任何有用的东西,你甚至无法得到StackOverflowException的堆栈跟踪,因为此时系统还没有处于稳定状态。(相比之下,在我自己的序列化程序中,我开始检查深度大约为10?50?之类的)Marc-你达到了目标。类中的一个属性调用了构造函数,这导致了整个递归循环,导致了异常。非常感谢你的帮助。。