我的模型类如下所示:
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: []
}
编辑2:
通过进一步研究这个问题(根据所有SO问答,设置ReferenceLoopHandling.Ignore
或PreserveReferencesHandling.Objects
应该有效),我发现
- 子对象是唯一的对象实例
- Child.SuperType (Parent) 是唯一的对象实例
- Child.SuperType.SubTypes[0] (Child) 是唯一的对象实例,而不是对 (1.) 的引用。
- Child.SuperType.SubTypes[0].超类型(父级)是唯一的对象实例,而不是对 (2.) 的引用。
- 等等...
我认为,在对象创建过程中出了点问题(在我的代码之外),这创建了无限的对象链。我不确定这是否可以通过JsonSerializerSettings
来处理.
Newtonsoft.Json 可以有以下配置
JsonSerializerSettings sets = new JsonSerializerSettings
{
PreserveReferencesHandling = PreserveReferencesHandling.Objects
};
var ser = JsonSerializer.Create(sets);
你可能想这样做。