【问题标题】:Json Deserialization with same property name with different case具有相同属性名称但大小写不同的 Json 反序列化
【发布时间】:2016-04-12 07:13:21
【问题描述】:

当我们有多个不同情况的属性名称时,我想了解 Json.NET 如何将 JSON 对象反序列化为对应的 c# 对象(我知道这不是一个好习惯,但只是想知道 JSON.NET 如何处理这个问题)。

我有一个定义如下的 c# 对象:

public class TestModel
{
    public string Name { get; set; }
    public bool IsEmployee { get; set; }
}

和json对象一样

{ "Name": "TestName","Isemployee":true, "isemployee":false};

那么,如果我使用 JSON.NET de-serialize 方法将上面的 json 字符串转换为 TestModel 对象,这两个属性中的哪一个将分配给IsEmployee 变量?为什么?

谢谢。

【问题讨论】:

  • Isemployee 和 isemployee 不是什么 IsEmployee 一样,所以 IsEmployee 会是 false,因为它是默认的 bool 值
  • 不,如果我将 isemploye 设为 true,则解析为 true。
  • 根据this 非常古老的“发行说明”,如果完全匹配失败,Json.NET 会尝试不区分大小写的匹配。不确定此功能是否可配置甚至仍然有效,但从您所描述的情况来看,它似乎是。尝试改变Isemployeeisemployee的顺序,看看是否对应用的IsEmployee值有影响。我的猜测是最后一个元素优先。
  • 您好,如果我更改订单,它会取最后一个属性的值。
  • 好的。我冒昧地在答案中对此进行了总结,请参见下文。

标签: c# json json.net deserialization


【解决方案1】:

在反序列化中,Json.NET 尝试在完全匹配失败时对属性进行不区分大小写的匹配,如 here 所讨论的。这与内置的 .NET JSON 序列化程序形成对比,请参阅 here

如果检测到多个匹配项,则最后一个匹配项优先。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-31
    • 2015-12-23
    • 2013-10-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多