【问题标题】:when does DataContractJsonSerializer include the type information?DataContractJsonSerializer 什么时候包含类型信息?
【发布时间】:2011-06-20 17:23:01
【问题描述】:

我注意到,使用 DataContractJsonSerializer,序列化的 JSON 字符串有时会包含以下形式的类型信息

{"__type":"MyClass:#MyNamespace", ... }

根据我的观察,它似乎只在序列化基本类型但传递 known 子类型时才这样做,这是有道理的,但我还没有找到任何官方文档来证实这一点或者实际上强制序列化程序在遇到自定义类型时始终表现出这种行为。

谁能确认我的观察是否正确?更好的是,如果您知道一种方法来指示序列化程序始终序列化自定义类型的类型信息,如果这可能的话?

谢谢,

【问题讨论】:

    标签: .net wcf json serialization


    【解决方案1】:

    实际上,您可以强制序列化程序始终一致地发出 __type 信息。

    如果您使用的是独立的序列化程序,请使用带有“alwaysEmitTypeInformation”参数的constructor overload。传入 true。

    如果您使用 DataContractJsonSerializerOperationBehavior,请将该属性上的相同属性设置为 true。我相信你也可以通过config来实现。

    最后,请参阅http://msdn.microsoft.com/en-us/library/bb412170.aspx 的“何时发出类型提示”部分以获得更详细的说明。

    希望这会有所帮助!

    【讨论】:

    • 太棒了!这正是我正在寻找的,甚至没有意识到构造函数重载之一让您指定是否始终发出类型信息,感谢您指出!
    • 好的,谢谢。当传递基本类型并且我看到了这一点时,我正在努力研究如何让 JSON 序列化为完整类型。它比我想出的一些 hacky 解决方案要容易得多。
    猜你喜欢
    • 2019-04-15
    • 2012-09-15
    • 2011-01-20
    • 1970-01-01
    • 1970-01-01
    • 2012-12-23
    • 1970-01-01
    • 2013-07-03
    相关资源
    最近更新 更多