ana*_*tol 4 c# serialization json json.net valuetuple
我正在尝试反序列化为[{"foo": "1", "bar": false}, {"foo": "2", "bar": false}]类型List<(string, bool)>:
JsonConvert.DeserializeObject<List<(string foo, bool bar)>>(json)
Run Code Online (Sandbox Code Playgroud)
但始终会获得默认值列表 - (null, false)。
如何实现正确的反序列化?
PS 我对用于此目的的任何模型/类都不感兴趣。我需要确切的值元组。
在 C#9 中,您可以创建一个 ValueTuplerecord并使用生成的解构函数来创建一个 ValueTuple。我确实看到您不想声明模型,但这是我发现的最接近的方法:
声明记录:
private record FooBar(string foo, bool bar);
反序列化和解构:
(string foo, bool bar) = JsonConvert.DeserializeObject<FooBar>(json);
或者
var (foo, bar) = JsonConvert.DeserializeObject<FooBar>(json);
创建 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;
Run Code Online (Sandbox Code Playgroud)
元组值存储在名为 的字段中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")));
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6766 次 |
| 最近记录: |