6

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

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

ASP.NET Web API 4,RTW

4

2 回答 2

6

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

于 2012-08-24T13:35:51.537 回答
3

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

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

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

于 2012-10-10T16:06:22.967 回答