【问题标题】:Ignoring a field during .NET JSON serialization; similar to [XmlIgnore]?在 .NET JSON 序列化期间忽略字段;类似于 [XmlIgnore]?
【发布时间】:2010-11-27 13:10:51
【问题描述】:

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

【问题讨论】:

    标签: c# .net asp.net-mvc json serialization


    【解决方案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】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-17
      • 1970-01-01
      • 1970-01-01
      • 2021-10-27
      相关资源
      最近更新 更多