繁体   English   中英

JSON.NET JToken键区分大小写?

[英]JSON.NET JToken Keys Are Case Sensitive?

我不得不使用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另一种方法可以让我抓住并反序列化各个属性?

编辑:

根据评论我最终做到了这一点:

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

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

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

将JToken转换为JObject并使用JObject的TryGetValue方法,您可以在其中指定String Comparision。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM