c# - 从 JSON 中排除域模型对象的属性

标签 c# json asp.net-mvc serialization json.net

我正在使用 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/

相关文章:

c# - 使用密码中的随机数字进行身份验证

c# - 你如何阅读 lambda 表达式?

c# - 使用 .NET core 3.0/System.text.Json 解析 JSON 文件

javascript - 在 Controller 中使用警报脚本后返回 View

c# - ASP.net MVC4 中 Html.BeginForm 中多个按钮的问题

c# - Windows 安全登录表单?

c# - 在 C# 中验证字符串中的 HTML 标记

c# - 如何获取 UTF-8 JSON

java - 具有多对多关系的无限递归

asp.net-mvc - 对于 AngularJs 或 Backbone Js 或 KnockOutJs 最好的 asp.net mvc?