c# - C# - 将 JSON 反序列化为 ValueTuple
问题描述
我正在尝试反序列[{"foo": "1", "bar": false}, {"foo": "2", "bar": false}]
化为List<(string, bool)>
类型:
JsonConvert.DeserializeObject<List<(string foo, bool bar)>>(json)
但总是得到一个默认值列表 - (null, false)
.
如何实现正确的反序列化?
PS我对任何用于此目的的模型/类都不感兴趣。我需要确切的值元组。
解决方案
创建 C# 元组功能是为了表示值集,而不是实体。
值的名称类似于变量的名称。与变量名称一样,元组值名称仅存在于源代码中。
(string foo, bool bar)
是,实际上,只是ValueTuple<string, int>
。就像(string bar, bool foo)
:
(string foo, bool bar) a = ('one', true);
(string bar, bool foo) b = a;
元组值存储在名为 的字段Item1
中,Item2
依此类推。
在这里亲自看看它是如何工作的。
如果您热衷于为此使用值元组,则必须对自己进行反序列化:
var json = "[{\"foo\": \"1\", \"bar\": false}, {\"foo\": \"2\", \"bar\": false}]";
var jArray = JsonConvert.DeserializeObject<JArray> (json);
var list = new List<(string foo, bool bar)>();
foreach (var item in jArray)
{
list.Add((item.Value<string>("foo"), item.Value<bool>("bar")));
}
推荐阅读
- excel - 在 Excel 中,使用 VBA 创建带有 unicode“文件夹”符号的超链接
- powershell - 使用 powershell 命令关闭 AHK 脚本
- mysql - 两个sql表之间的两列之间的区别
- spring-boot - 尝试在 spring-boot olingo odatav2 服务上使用日期进行过滤,但出现公历错误
- swift - self.presentedViewController 即使被关闭也不会清除,从而阻止插页式 AdMob 广告展示
- javascript - 将 jQuery 函数重写为 Angular 9
- python - Python/Linux:如何确定移动文件何时完全可用?
- javascript - 尝试更新 DynamoDB 条目时出现 API 网关错误(ValidationException:ExpressionAttributeValues 不能为空)
- ios - UIStackView 的尾随约束没有得到兑现
- jquery - Ajax 多个数据点发布到 MVC 核心错误 400