Json.NET不区分大小写的属性反序列化

Json.NET将“不区分大小写的属性反序列化”列为广告function之一。 我已经读过,将首先尝试匹配指定属性的大小写,如果未找到匹配项,则执行不区分大小写的搜索。 但这似乎不是默认行为。 请参阅以下示例:

var result = JsonConvert.DeserializeObject<KeyValuePair>( "{key: 123, value: \"test value\"}" ); // result is equal to: default(KeyValuePair) 

如果更改JSON字符串以匹配属性的情况(“Key”和“Value”vs“key”和“value”),那么一切都很好:

 var result = JsonConvert.DeserializeObject<KeyValuePair>( "{Key: 123, Value: \"test value\"}" ); // result is equal to: new KeyValuePair(123, "test value") 

有没有办法执行不区分大小写的反序列化?

这是一个错误。

不区分大小写的属性反序列化是指Json.NET能够将名为“Key”的JSON属性映射到.NET类的“Key”或“key”成员。

错误是KeyValuePair需要自己的JsonConverter但是错过了不区分大小写的映射。

https://github.com/JamesNK/Newtonsoft.Json/blob/fe200fbaeb5bad3852812db1e964473e1f881d93/Src/Newtonsoft.Json/Converters/KeyValuePairConverter.cs

使用它作为基础,并在读取JSON时将小写“key”和“value”添加到case语句。

我找到的一种有效方法是使用带有StringComparer参数的GetValue。

例如,

 JObject contact; String strName = contact.GetValue('Name'); 

您正在尝试访问“名称”属性,因为不区分大小写,您可以使用

 JObject contact; String strName = contact.GetValue("ObjType", StringComparison.InvariantCultureIgnoreCase);