如何解决.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,null);
结果
<MyNamespace.Test ...>
<Name z:Id=\"2\">Parent</Name>
<Recursion z:Ref=\"1\" i:nil=\"true\" />
</MyNamespace.Test>
,您可以使用
<readerQuotas maxDepth=\"n\" />
定义深度序列化的程度。但是,如果您具有更高的递归,则会抛出异常。版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。