【问题标题】:Where should I add [JsonIgnore] to prevent certain properties from being serialized?我应该在哪里添加 [JsonIgnore] 以防止某些属性被序列化?
【发布时间】:2012-08-24 13:20:52
【问题描述】:

这是一个非常简单的 Web API 项目。我有一个数据模型、生成的 DbContext 和一个控制器。

当我将[JsonIgnore] 属性添加到我的模型类的某些属性,然后对数据模型进行更改时,模型类会重新生成并且我的[JsonIgnore] 属性会被删除。我理解为什么会发生这种情况,并且我不应该向自动生成的类添加属性。我的问题是,我应该在哪里使用属性注释类,例如 [JsonIgnore] 以便与 ASP.NET Web API 一起使用?

ASP.NET Web API 4,RTW

【问题讨论】:

    标签: asp.net-mvc


    【解决方案1】:

    您应该使用视图模型。基本上定义只包含您需要公开的属性的类,然后从您的 Web API 操作中返回这些视图模型。这样您就不必担心使用[JsonIgnore] 属性污染您的域模型,特别是如果您不希望这些属性仅在某些操作中被忽略。为了简化域模型和视图模型之间的映射,您可以查看AutoMapper

    【讨论】:

      【解决方案2】:

      因为您明确表示您正在创建一个非常简单的 Web API 项目,所以您可以通过简单的全局替换来摆脱困境。当我将项目转换为使用 ASP.NET Web API 时,我遇到了同样的问题。因为我定期更改数据库模式,所以返回原始类型比动态或强类型视图模型更容易,因为被包装的数据的属性在不断变化。

      序列化需要忽略的属性恰好是 EF 生成的所有导航属性。碰巧所有这些属性都是虚拟的。我在文件中进行了替换(仅限于我的数据库项目)将所有 public virtual 替换为 [Newtonsoft.Json.JsonIgnore] public virtual

      一种快速简便的修复方法,允许在项目仍在开发时进行测试。我同意最后,您可能应该将 EF 模型包装到视图模型中,但是这种简单的方法可以让您在没有它们的情况下继续工作更长时间。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-10-12
        • 1970-01-01
        • 2012-08-04
        • 2021-10-03
        • 2018-03-15
        • 2020-12-29
        相关资源
        最近更新 更多