【发布时间】:2010-11-27 13:10:51
【问题描述】:
我有一个 POCO 类,它作为 .NET 3.5 sp1 中的 JSON 字符串发送到浏览器。我只是使用默认的 JSON 序列化,并且有一些我想忽略的字段。我想在它们上面放一个类似于 [System.Xml.Serialization.XmlIgnore] 的属性,这样它们就不会被序列化了。
【问题讨论】:
标签: c# .net asp.net-mvc json serialization
我有一个 POCO 类,它作为 .NET 3.5 sp1 中的 JSON 字符串发送到浏览器。我只是使用默认的 JSON 序列化,并且有一些我想忽略的字段。我想在它们上面放一个类似于 [System.Xml.Serialization.XmlIgnore] 的属性,这样它们就不会被序列化了。
【问题讨论】:
标签: c# .net asp.net-mvc json serialization
[ScriptIgnore]
是你的哈卡莓。
【讨论】:
我在我的模型上使用ScriptIgnore 属性,如下所示:
public class Item
{
[ScriptIgnore]
public Item ParentItem { get; set; }
}
在这个特定的场景中,我从 Json 序列化程序中得到了一个循环引用错误,所以我只是忽略了它。当我开始了解 Model 和 ViewModel 之间的区别时,我是 asking a similar question here on SO。
【讨论】:
您只需要添加
[ScriptIgnore(ApplyToOverrides = true)] 到您的文本模板 (.tt) 文件中。
这是我之前的文本模板的一部分
#>
<#=codeStringGenerator.NavigationProperty(navigationProperty)#>
<#
在我插入代码后,codeStringGenerator 上方的行会自动生成,如下所示:
[ScriptIgnore(ApplyToOverrides = true)]
public virtual ICollection<Currency> Currencies { get; set; }
我还需要修改UsingDirectives函数以插入"using System.Web.Script.Serialization;"
【讨论】:
ApplyToOverrides 似乎对虚拟财产非常重要
将属性设置为内部。不过,这取决于您的结构。考虑。
【讨论】: