我的模型类如下所示:
public class ModelType
{
public string Name { get; set; }
public ModelType SuperType { get; set }
public IEnumerable<ModelType> SubTypes { get; set; }
}
我正在尝试序列化对象,但获取StackOverflowException
。我试过打电话
JsonConvert.SerializeObject(model, new JsonSerializerSettings { ReferenceLoopHandling = ReferenceLoopHandling.Ignore });
以及
JsonConvert.SerializeObject(model, new JsonSerializerSettings { PreserveReferencesHandling = PreserveReferencesHandling.Objects });
这两个来电都是StackOverflowException
。知道如何序列化ModelType
实例吗?
修改:
无法序列化的实例示例:
{
Name: "Child",
SuperType: {
Name: "Parent",
SuperType: null,
SubTypes: [{
Name: "Child",
SuperType: {
Name: "Parent",
SuperType: null,
SubTypes: [{Name: "Child", ...}]
},
SubTypes: []
}]
},
SubTypes: []
}
EDIT2 :
通过进一步调查问题(根据所有SO Q&amp; A,设置ReferenceLoopHandling.Ignore
或PreserveReferencesHandling.Objects
应该有效)我发现了
我认为,在对象创建过程中出现问题(我的代码之外),这创建了无限的对象链。我不确定这是否可以仅由JsonSerializerSettings
处理。
答案 0 :(得分:4)
Newtonsoft.Json可以拥有以下配置
JsonSerializerSettings sets = new JsonSerializerSettings
{
PreserveReferencesHandling = PreserveReferencesHandling.Objects
};
var ser = JsonSerializer.Create(sets);
你可能想这样做。