JSON.NET JToken Keys Are Case Sensitive?

为君一笑 提交于 2019-12-07 03:32:23

问题


I'm having to perform some custom deserialization with JSON.NET and I just found that it's treating the key values in a JToken as case sensitive. Here's some code:

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);
}

The version variable is null even though the json contains a version element at the top level, it's just in upper case:

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

Is there any way to use JToken with case-insensitive keys? Or maybe another approach without JToken that lets me grab and deserialize individual properties?

EDIT:

Based on the comments I ended up doing this:

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

回答1:


You can cast JToken to JObject and do this:

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



回答2:


Convert JToken to JObject and use TryGetValue method of JObject in which you can specify String Comparision.

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


来源:https://stackoverflow.com/questions/49886411/json-net-jtoken-keys-are-case-sensitive

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!