我不得不使用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);
}
Run Code Online (Sandbox Code Playgroud)
version即使json在顶层包含一个版本元素,该变量仍为null,它只是大写:
{
"VERSION" : "1.0",
"NAME" : "john smith"
}
Run Code Online (Sandbox Code Playgroud)
有没有办法使用JToken不区分大小写的键?或者也许没有JToken它的另一种方法可以让我抓住并反序列化各个属性?
编辑:
根据评论我最终做到了这一点:
JObject token = JObject.Load(reader);
string version = token.GetValue("version", StringComparison.OrdinalIgnoreCase).ToObject<string>(serializer);
Run Code Online (Sandbox Code Playgroud)
Van*_*res 16
您可以将JToken转换为JObject并执行此操作:
string ver = ((JObject)token).GetValue("version", StringComparison.OrdinalIgnoreCase)?.Value<string>();
Run Code Online (Sandbox Code Playgroud)
将 JToken 转换为 JObject 并使用 JObject 的 TryGetValue 方法,您可以在其中指定字符串比较。
var jObject = JToken.Load(reader) as JObject;
JToken version;
jObject.TryGetValue("version", StringComparison.OrdinalIgnoreCase, out version);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2263 次 |
| 最近记录: |