这是一个非常简单的Web API项目。我有一个数据模型,生成DbContext和一个控制器。
当我将[JsonIgnore]
属性添加到模型类的某些属性上,然后稍后对数据模型进行更改时,模型类将重新生成,并删除[JsonIgnore]
属性。我理解为什么会发生这种情况,我不应该将属性添加到自动生成的类中。我的问题是,我应该在哪里注释具有属性的类,例如[JsonIgnore]
用于ASP.NET Web API?
ASP.NET Web API 4,RTW
答案 0 :(得分:6)
您应该使用视图模型。基本上定义的类只包含您需要公开的属性,然后从Web API操作返回这些视图模型。这样,您就不必担心使用[JsonIgnore]
属性污染域模型,尤其是如果您不希望仅针对某些操作忽略这些属性。为了简化您的域模型和视图模型之间的映射,您可以查看AutoMapper。
答案 1 :(得分:3)
因为您明确表示您正在创建一个非常简单的Web API项目,所以您可以通过简单的全局替换来逃避。当我将项目转换为使用ASP.NET Web API时,我遇到了同样的问题。因为我正在定期更改数据库模式,所以返回原始类型而不是动态或强类型视图模型更容易,因为被包装数据的属性不断变化。
序列化需要忽略的属性恰好是EF生成的所有导航属性。所有这些属性都是虚拟的。我在文件中进行了替换(仅限于我的数据库项目),将所有public virtual
替换为[Newtonsoft.Json.JsonIgnore] public virtual
。
快速简便的修复,允许在项目仍处于开发阶段时进行测试。我同意,最后,您应该将EF模型包装到视图模型中,但这种简单的方法可以让您在没有它们的情况下继续工作一段时间。