我很好奇Tuple<T1, T2, T3, ...>
是如何序列化和反序列化的。我使用关键字"json“和"tuple”进行了搜索,但找不到我想要的内容。
发布于 2021-10-21 16:33:45
对于.NET5和即将推出的.NET6,现在建议使用System.Text.Json
而不是NewtonSoft。对于这个关于元组的序列化程序来说,重要的是设置JsonSerializerOptions
选项IncludeFields
,否则默认情况下会排除元组值。
此外,由标准Item1
替换的named tuples are just syntactic sugar,编译器使用Item2
表示法。要包含名称,最简单的方法是use an anonymous object。
下面是一个最小的例子。(可以使用.NET5编译器粘贴到.NET fiddle中)
using System;
using System.Collections.Generic;
using System.Text.Json;
public class Program
{
public static void Main()
{
JsonSerializerOptions options = new() { IncludeFields = true };
var testTuple = ("test" , "test1", 1324, false);
var serializedTuple = JsonSerializer.Serialize(testTuple, options);
Console.WriteLine(serializedTuple);
var testTuple2 = (NamedItem1: "test" , NamedItemTwo: "test1", TheIntegersName: 1324, ThisBoolHasAFirstNameIts: false);
var serializedTuple2 = JsonSerializer.Serialize(new {testTuple2.NamedItem1, testTuple2.NamedItemTwo, testTuple2.TheIntegersName, testTuple2.ThisBoolHasAFirstNameIts }, options);
Console.WriteLine(serializedTuple2);
}
}
输出:
{"Item1":"test","Item2":"test1","Item3":1324,"Item4":false}
{"NamedItem1":"test","NamedItemTwo":"test1","TheIntegersName":1324,"ThisBoolHasAFirstNameIts":false}
https://stackoverflow.com/questions/16101115
复制相似问题