首页 > 解决方案 > 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#jsonserializationjson.netvaluetuple

解决方案


创建 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")));
}

推荐阅读