Json.NET Case-insensitive Property Deserialization(Json.NET 不区分大小写的属性反序列化)
问题描述
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.
https://github.com/JamesNK/Newtonsoft.Json/blob/fe200fbaeb5bad3852812db1e964473e1f881d93/Src/Newtonsoft.Json/Converters/KeyValuePairConverter.cs
以它为基础,在读取 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 不区分大小写的属性反序列化的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:Json.NET 不区分大小写的属性反序列化
基础教程推荐
- 如何在 IDE 中获取 Xamarin Studio C# 输出? 2022-01-01
- 将 Office 安装到 Windows 容器 (servercore:ltsc2019) 失败,错误代码为 17002 2022-01-01
- rabbitmq 的 REST API 2022-01-01
- 为什么Flurl.Http DownloadFileAsync/Http客户端GetAsync需要 2022-09-30
- MS Visual Studio .NET 的替代品 2022-01-01
- SSE 浮点算术是否可重现? 2022-01-01
- 有没有办法忽略 2GB 文件上传的 maxRequestLength 限制? 2022-01-01
- c# Math.Sqrt 实现 2022-01-01
- 将 XML 转换为通用列表 2022-01-01
- 如何激活MC67中的红灯 2022-01-01