.net DataContractSerializer:如何处理递归数据结构?

| 如果我有一个像这样的递归数据结构的类
  public class Test
  {
     public string Name { get; set; }
     public Test Recursion { get; set; }
  }
并序列化它
     var objectToSave= new Test{Name=\"Parent\"};
     objectToSave.Recursion = test; // this is an endless recursion

     DataContractSerializer ds = new DataContractSerializer(objectToSave.GetType());

     XmlWriterSettings settings = new XmlWriterSettings() { Indent = true };
     using (XmlWriter w = XmlWriter.Create(\"result.xml\", settings))
        ds.WriteObject(w, objectToSave);
我得到
    <?xml version=\"1.0\" encoding=\"utf-8\"?>
    <MyNamespace.Test ...>
      <Name>Parent</Name>
      <Recursion>
        <Name>Parent</Name>
        <Recursion>
          <Name>Parent</Name>
          <Recursion>
            <Name>Parent</Name>
            <Recursion>
           ...... togehter 1586 lines
更新: 有一个参数MaxItemsInObjectGraph可以限制输出。 有人知道如何为此找到好的价值吗? 还是有一种方法可以告诉序列化程序应该进行多深的递归,或者获得没有冗余的更紧凑的xml?
已邀请:
此设置似乎有效
     DataContractSerializer ds = new DataContractSerializer(objectToSave.GetType(), 
                                     null, 20000, true, true, null);
结果
    <MyNamespace.Test ...>
      <Name z:Id=\"2\">Parent</Name>
      <Recursion z:Ref=\"1\" i:nil=\"true\" />
    </MyNamespace.Test>
您可以使用
<readerQuotas maxDepth=\"n\" />
定义深度序列化的程度。但是,如果您具有更高的递归,则会抛出异常。

要回复问题请先登录注册