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

时间:2012-08-24 13:20:52

标签: asp.net-mvc

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

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

ASP.NET Web API 4,RTW

2 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:3)

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

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

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