问题描述
我想将一个类序列化为一个 XML 文件。我的类有包含许多循环引用的子类,为此我使用 DataContractSerializer。在所有类中,属性 IsReferenze = true 被设置。
不幸的是,我在序列化时总是遇到 stackoverflow 异常。我是否必须注意 DataContractSerializer 的某些内容,或者它是否只是通过许多循环引用和列表达到其限制?它适用于一些条目,但在达到一定数量后就不再起作用了。
示例:
[DataContract(IsReference = true)]
public class ParentClass
{
[DataMember] public ConcurrentDictionary<string,A> Dict{ get; set; } = new ConcurrentDictionary<string,A>();
[DataMember] public List<B> List1 { get; set; } = new List<B>();
[DataMember] public List<B> List2 { get; set; } = new List<B>();
[DataMember] public List<B> List3 { get; set; } = new List<B>();
[DataMember] public List<B> List4 { get; set; } = new List<B>();
[DataMember] public List<B> List5 { get; set; } = new List<B>();
[DataMember] public List<C> List6 { get; set; } = new List<C>();
[DataMember] public List<C> List7 { get; set; } = new List<C>();
[DataMember] public List<C> List8 { get; set; } = new List<C>();
}
[DataContract(IsReference=true)]
public class A
{
[DataMember] public string Text { get; set; }
[DataMember] public List<B> List1 { get; set; } = new List<B>();
[DataMember] public List<B> List2 { get; set; } = new List<B>();
[DataMember] public List<B> List3 { get; set; } = new List<B>();
[DataMember] public List<B> List4 { get; set; } = new List<B>();
[DataMember] public List<C> List5 { get; set; } = new List<C>();
}
[DataContract(IsReference=true)]
public class B
{
[DataMember] public List<A> List1 { get; set; } = new List<A>();
[DataMember] public List<string> List2 { get; set; } = new List<string>();
[DataMember] public List<B> List3 { get; set; } = new List<B>();
[DataMember] public List<B> List4 { get; set; } = new List<B>();
}
[DataContract(IsReference=true)]
public class C
{
[DataMember] public string Id { get; set; }
[DataMember] public string Text { get; set; }
[DataMember] public List<B> List1 { get; set; } = new List<B>();
[DataMember] public List<B> List2 { get; set; } = new List<B>();
[DataMember] public List<C> List3 { get; set; } = new List<C>();
}
private void Serialize()
{
var ds = new DataContractSerializer(typeof(ParentClass));
var settings = new XmlWriterSettings { Indent = true };
using (var w = XmlWriter.Create(@"test.xml",settings))
{
ds.WriteObject(w,ParentClassObject);
}
}
有人有想法吗?
最好的问候!
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)