【问题标题】:Json.NET Type ConversionJson.NET 类型转换
【发布时间】:2017-03-27 14:48:32
【问题描述】:

我有两个应用程序通过 rest API 进行通信,通过 Json.NET 序列化

我遇到困难的部分是在两个应用程序之间传递继承结构:

ChildClass1 : BaseClass
ChildClass2 : BaseClass

我需要能够反序列化一个 BaseClass 的列表,这些 BaseClass 分别被反序列化为正确的相对类型:

JsonConvert.DeserializeObject<IEnumerable<BaseClass>>(json)

我知道 TypeNameHandling.All Serializer 设置,但我遇到的问题是每个应用程序上的类位于不同的命名空间中:

应用1:

App1.NameSpace.ChildClass1

应用 2:

App2.DifferentNameSpace.ChildClass1

因此,它不会自动转换它们。无法更改命名空间或为这些类使用协定库。

我需要编写自定义 JsonReader 吗?或者是否有一个设置我可以在序列化/反序列化时覆盖类名,以便我可以删除命名空间?

【问题讨论】:

    标签: c# .net json serialization


    【解决方案1】:

    您可以使用在设置中设置的ISerializationBinder,允许您指定在序列化期间在 JSON 中使用的名称以及在反序列化时使用的类型。

    这样您就可以完全控制要使用的名称。

    可以在here 找到一个示例。

    【讨论】:

    • 所以这是部分工作,通过使用这种方法,我能够删除程序集名称/命名空间。然而,问题是它也在 json 的开头弄乱了 List 初始类型。这就是我在 json 开始进入列表之前所拥有的全部内容: {"$type":"List`1","$values":
    • 修复了它。需要将 TypeNameHandling.All 更改为 TypeNameHandling.Object;感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 2017-06-22
    • 2014-03-26
    • 1970-01-01
    • 2014-07-27
    • 1970-01-01
    • 1970-01-01
    • 2012-11-20
    • 1970-01-01
    相关资源
    最近更新 更多