【问题标题】:How can I exclude the Type information from the DataContract?如何从 DataContract 中排除类型信息?
【发布时间】:2010-09-10 12:29:53
【问题描述】:

我想从我的序列化中排除 __type 键和值:

{"__type":"Entity:#Runtime.DataBus","Children":[],"Fields":[{"Key":"field1","Value":"10"},{"Key":"fieldString1","Value":"field1 init"},{"Key":"fieldString2","Value":"field2 init"}],"Name":"Entity1"}

我正在使用System.Runtime.Serialization.Json.DataContractJsonSerializer

我不得不将 Types 标记为 KnownTypes,似乎就是这将 __type 拉入了序列化。

我不希望它出现在我的对象中,怎么办?

如果不使用带有 DataContract 的类的 KnownType 属性,它会起作用,但如果在此类中没有它,我会在此类成员的类型上遇到各种异常。

【问题讨论】:

    标签: json serialization


    【解决方案1】:

    在较新的版本中,您可以使用以下代码

    DataContractJsonSerializerSettings settings = new DataContractJsonSerializerSettings();
    settings.EmitTypeInformation = System.Runtime.Serialization.EmitTypeInformation.Never;
    

    【讨论】:

      【解决方案2】:

      我可以肯定地说,没有办法做到这一点,除非你不在多态场景中序列化类型。

      一种可能的解决方案是创建某种不会调用多态性的包装器操作,并通过该操作而不是通过 poly 方法返回对象。

      JSON 序列化程序确实有一个名为 alwaysEmitTypeInformation 的标志,但您将其打开以始终发出 __type。现在有办法关闭它,主要是为了避免无意的用户错误。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-10-03
        • 2021-05-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多