我很好奇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}
发布于 2020-05-08 18:53:54
感谢Hinrich到上面的dotnetfiddle链接。
我使用了相同的链接,并了解了Json对象和元组之间的转换工作原理。代码如下:
using System;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
public class Program
{
public static void Main()
{
var testTuple = Tuple.Create<int, string, bool>(1234, "foo", true);
var serialized = JsonConvert.SerializeObject(testTuple);
Console.WriteLine(serialized);
JObject test = ((JObject)JsonConvert.DeserializeObject(serialized));
string strSerialized = JsonConvert.SerializeObject(test);
//Tuple<int, string, bool> testTuple1 = JsonConvert.DeserializeObject<Tuple<int, string, bool>>(serialized); // WORKs
Tuple<int, string, bool> testTuple1 = JsonConvert.DeserializeObject<Tuple<int, string, bool>>(strSerialized); // WORKs
Console.WriteLine(testTuple1.Item1.ToString());
}
}
希望有人觉得这对我有帮助。
https://stackoverflow.com/questions/16101115
复制相似问题