首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >元组如何序列化到JSON和从JSON反序列化?

元组如何序列化到JSON和从JSON反序列化?
EN

Stack Overflow用户
提问于 2013-04-19 17:10:55
回答 2查看 53.7K关注 0票数 50

我很好奇Tuple<T1, T2, T3, ...>是如何序列化和反序列化的。我使用关键字"json“和"tuple”进行了搜索,但找不到我想要的内容。

EN

回答 2

Stack Overflow用户

发布于 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}

票数 7
EN

Stack Overflow用户

发布于 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());
    }
}

希望有人觉得这对我有帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16101115

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档