.NET JSON序列化过程中忽略字段;类似于[XmlIgnore]?


80

我有一个POCO类,它作为.NET 3.5 sp1中的JSON字符串发送到浏览器。我只是使用默认的JSON序列化,我想忽略一些字段。我想在它们上放置一个类似于[System.Xml.Serialization.XmlIgnore]的属性,以便不进行序列化。

Answers:


121

我在模型上使用ScriptIgnore属性,如下所示:

public class Item
{
    [ScriptIgnore]
    public Item ParentItem { get; set; }
}

在这种特殊情况下,我从Json序列化器收到循环引用错误,因此我只是忽略了它。当我打开Model和ViewModel之间的区别时,我在SO上问过类似的问题


1
如果不是POCO而是生成的EntityModel,我不想编辑生成的代码,该怎么办,可以将ScriptIgnore属性添加到生成的实体模型。
hazimdikenli

@hazimdikenli您可能必须为此使用局部类。
阿南德(Anand)

11
不要忘了添加对“ System.Web.Extensions”的引用以使其工作
Levitikon 2011年

1
这帮助我阻止了toJson(Model)带回一些不需要的字段,但是理想情况下,使用API​​,您需要使用新模型和控制器创建一个新区域,以避免交叉注释..但是我太懒了。感谢+1
Piotr Kula 2012年

27
[ScriptIgnore] 

是你的huckaberry。


1
它实际上是“ Huckle Bearer”,但我会为您的努力和电影给+1。:)
Bryan Ray

8
原始答案是正确的,他说“哈克贝利”,而不是“哈克贝利”。 imsdb.com/scripts/Tombstone.html
heisenberg

5
...就像在“哈克贝利·芬恩”中一样-指典型的“每个人”,本能地努力做到“做正确的事”-可以一直依靠的真正朋友...因此,“我是你的哈克贝利” ,意思是“您可以依靠我”。
John Holliday 2013年

2

您只需将添加 [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在虚拟财产上似乎非常重要
Todd

1

将属性设置为内部。不过,这取决于您的结构。考虑到。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.