Asp.net mvc 我应该在哪里添加[JsonIgnore],以防止某些属性被序列化?

Asp.net mvc 我应该在哪里添加[JsonIgnore],以防止某些属性被序列化?,asp.net-mvc,Asp.net Mvc,这是一个非常简单的WebAPI项目。我有一个数据模型、生成的DbContext和一个控制器 当我将[JsonIgnore]属性添加到模型类上的某些属性中,然后对数据模型进行更改时,将重新生成模型类,并删除我的[JsonIgnore]属性。我理解为什么会发生这种情况,我不应该向自动生成的类添加属性。我的问题是,我应该在哪里用属性来注释类,比如[JsonIgnore]以便与ASP.NET Web API一起使用 ASP.NET Web API 4,RTW您应该使用视图模型。基本上定义只包含需要公开的

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

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


ASP.NET Web API 4,RTW

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

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

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

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