在 .NET JSON 序列化期间忽略字段;类似于 [XmlIgnore]?
Posted
技术标签:
【中文标题】在 .NET JSON 序列化期间忽略字段;类似于 [XmlIgnore]?【英文标题】:Ignoring a field during .NET JSON serialization; similar to [XmlIgnore]? 【发布时间】:2010-11-27 13:10:51 【问题描述】:我有一个 POCO 类,它作为 .NET 3.5 sp1 中的 JSON 字符串发送到浏览器。我只是使用默认的 JSON 序列化,并且有一些我想忽略的字段。我想在它们上面放一个类似于 [System.Xml.Serialization.XmlIgnore] 的属性,这样它们就不会被序列化了。
【问题讨论】:
【参考方案1】:[ScriptIgnore]
是你的哈卡莓。
【讨论】:
它实际上是“Huckle Bearer”,但我会给你一个 +1 的努力和电影。 :) 原来的答案是正确的,他说的是“huckleberry”,而不是“huckle bearer”。 imsdb.com/scripts/Tombstone.html ...就像在“哈克贝利·费恩”中一样——指的是典型的“每个人”,他们本能地努力“做正确的事”——你永远可以信赖的真正朋友...因此“我是你的哈克贝利”,意思是“你可以指望我”。【参考方案2】:我在我的模型上使用ScriptIgnore 属性,如下所示:
public class Item
[ScriptIgnore]
public Item ParentItem get; set;
在这个特定的场景中,我从 Json 序列化程序中得到了一个循环引用错误,所以我只是忽略了它。当我开始了解 Model 和 ViewModel 之间的区别时,我是 asking a similar question here on SO。
【讨论】:
如果它不是 POCO 而是生成的 EntityModel,我不想编辑生成的代码,是否有解决方法将 ScriptIgnore 属性添加到生成的实体模型。 @hazimdikenli 您可能必须为此使用部分类。 不要忘记添加对“System.Web.Extensions”的引用以使其正常工作 这帮助我阻止了我的 toJson(Model) 带回一些不需要的字段,但理想情况下,使用 API,您需要使用新模型和控制器创建一个新区域,以避免交叉注释。 .但我太懒了。谢谢+1【参考方案3】:您只需要添加
[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
似乎对虚拟财产非常重要【参考方案4】:
将属性设置为内部。不过,这取决于您的结构。考虑。
【讨论】:
以上是关于在 .NET JSON 序列化期间忽略字段;类似于 [XmlIgnore]?的主要内容,如果未能解决你的问题,请参考以下文章