问题描述
Json.NET 将不区分大小写的属性反序列化"列为宣传的功能之一.我已经阅读过,将首先尝试匹配指定属性的大小写,如果未找到匹配项,则执行不区分大小写的搜索.然而,这似乎不是默认行为.请参阅以下示例:
Json.NET lists "Case-insensitive property deserialization" as one of the advertised features. I have read that an attempt will first be made to match the case of the property specified and if a match is not found a case-insensitive search is performed. This does not appear to be the default behavior however. See the following example:
var result =
JsonConvert.DeserializeObject<KeyValuePair<int, string>>(
"{key: 123, value: "test value"}"
);
// result is equal to: default(KeyValuePair<int, string>)
如果 JSON 字符串被更改以匹配属性的大小写(Key"和Value"与key"和value"),那么一切都很好:
If the JSON string is altered to match the case of the properties ("Key" and "Value" vs "key" and "value") then all is well:
var result =
JsonConvert.DeserializeObject<KeyValuePair<int, string>>(
"{Key: 123, Value: "test value"}"
);
// result is equal to: new KeyValuePair<int, string>(123, "test value")
有没有办法执行不区分大小写的反序列化?
Is there a way to perform to case-insensitive deserialization?
推荐答案
这是一个错误.
不区分大小写的属性反序列化是指 Json.NET 能够将名为Key"的 JSON 属性映射到 .NET 类的Key"或key"成员.
Case-insensitive property deserialization refers to Json.NET being able to map a JSON property with the name "Key" to either a .NET class's "Key" or "key" member.
错误是 KeyValuePair 需要它自己的 JsonConverter 但错过了不区分大小写的映射.
The bug is KeyValuePair requires its own JsonConverter but misses out of the case insensitive mapping.
以它为基础,在读取 JSON 时将小写的key"和value"添加到 case 语句中.
Use that as a base and add the lower case "key" and "value" to the case statement when reading JSON.
这篇关于Json.NET 不区分大小写的属性反序列化的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!