我正在使用 Newtonsoft JSON 序列化卫星程序集中定义的对象图。我有一个循环引用,它导致超出 JSON 中的递归限制,并给已经数据量很大的 POST 添加额外的膨胀。
记录的方法是将 JsonIgnore
属性添加到我的数据对象上的属性,但这需要在我的域项目中引用 Newtonsoft.Json。还有其他方法可以将属性从序列化中排除吗?
最佳答案
替代方案 1
您应该能够将[DataContract]
与[DataMember]
一起使用。
[DataContract]
public class MyDomainModel
{
[DataMember]
public string PublicString { get; set; }
public string HiddenString { get; set; }
public MyDomainModel InfiniteReference { get; set; }
}
它需要引用System.Runtime.Serialization
。
示例:
[HttpGet]
public MyDomainModel GetModels()
{
var model = new MyDomainModel
{
HiddenString = "Hidden",
PublicString = "Public",
};
model.InfiniteReference = model;
return model;
}
输出:
{
"publicString": "Public"
}
替代方案 2
I have a circular reference [...]
您可以使用 ReferenceLoopHandling
,这只是切断了循环引用。但这可能不是您想要的,当您提到其他额外的膨胀时。
config.Formatters.JsonFormatter.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
关于c# - 从 JSON 中排除域模型对象的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38656740/