如果我有一个像这样的递归数据结构的类
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?
答案 0 :(得分:2)
此设置似乎有效
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>
答案 1 :(得分:1)
您可以使用
<readerQuotas maxDepth="n" />
定义序列化的深度。但是如果你有更高的递归,这将抛出异常。