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但是错过了不区分大小写的映射。
使用它作为基础,并在读取JSON时将小写“key”和“value”添加到case语句。
我找到的一种有效方法是使用带有StringComparer参数的GetValue。
例如,
JObject contact; String strName = contact.GetValue('Name');
您正在尝试访问“名称”属性,因为不区分大小写,您可以使用
JObject contact; String strName = contact.GetValue("ObjType", StringComparison.InvariantCultureIgnoreCase);