【问题标题】:JSON.NET JToken Keys Are Case Sensitive?JSON.NET JToken 密钥是否区分大小写?
【发布时间】:2018-04-17 19:53:24
【问题描述】:

我不得不使用 JSON.NET 执行一些自定义反序列化,我刚刚发现它将 JToken 中的键值视为区分大小写。这是一些代码:

public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
     JToken token = JToken.Load(reader);
     JToken version = token["version"];

     string ver = version.ToObject<string>();

     return new MyVersion(ver);
}

version 变量为 null,即使 json 包含顶层的版本元素,它只是大写:

{
    "VERSION" : "1.0",
    "NAME" : "john smith"
}

有什么方法可以将JToken 与不区分大小写的键一起使用?或者可能是另一种没有JToken 的方法,可以让我抓取和反序列化单个属性?

编辑:

基于我最终这样做的 cmets:

JObject token = JObject.Load(reader);
string version = token.GetValue("version", StringComparison.OrdinalIgnoreCase).ToObject<string>(serializer);

【问题讨论】:

标签: c# json json.net


【解决方案1】:

您可以将 JToken 转换为 JObject 并执行以下操作:

string ver = ((JObject)token).GetValue("version", StringComparison.OrdinalIgnoreCase)?.Value<string>();

【讨论】:

    【解决方案2】:

    将 JToken 转换为 JObject 并使用 JObject 的 TryGetValue 方法,您可以在其中指定字符串比较。

     var jObject = JToken.Load(reader) as JObject;
     JToken version;
     jObject.TryGetValue("version", StringComparison.OrdinalIgnoreCase, out version);
    

    【讨论】:

      猜你喜欢
      • 2014-01-26
      • 2020-10-21
      • 2011-11-16
      • 1970-01-01
      • 2016-04-06
      • 2012-08-16
      • 2013-03-16
      • 2012-08-07
      • 2023-03-22
      相关资源
      最近更新 更多