Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 元组如何序列化到JSON并从JSON反序列化?_C#_Json - Fatal编程技术网

C# 元组如何序列化到JSON并从JSON反序列化?

C# 元组如何序列化到JSON并从JSON反序列化?,c#,json,C#,Json,我很好奇元组如何序列化和反序列化。我使用关键字“json”和“tuple”进行搜索,但找不到我想要的内容。我通过UnitTest和进行测试,测试代码如下所示。结果表明,Tuple是可序列化和反序列化的。所以我可以在我的应用程序中使用它们 测试代码 公共类Foo{ 公共列表项{get;set;} 公共食物( { 项目=新列表(); } 公共重写字符串ToString() { StringBuilder sb=新的StringBuilder(); foreach(项目中的var a) { sb.追加

我很好奇
元组如何序列化和反序列化。我使用关键字“json”和“tuple”进行搜索,但找不到我想要的内容。

我通过
UnitTest
和进行测试,测试代码如下所示。结果表明,
Tuple
是可序列化和反序列化的。所以我可以在我的应用程序中使用它们

测试代码
公共类Foo{
公共列表项{get;set;}
公共食物(
{
项目=新列表();
}
公共重写字符串ToString()
{
StringBuilder sb=新的StringBuilder();
foreach(项目中的var a)
{
sb.追加(a.Item1+“,+a.Item2+”,“+a.Item3.ToString()+”\r\n”);
}
使某人返回字符串();
}
}
[测试类]
公共类正态分布测试
{
[测试方法]
公共空元组化()
{
Foo测试=新的Foo();
tests.Items.Add(Tuple.Create(“one”,“hehe”,true));
tests.Items.Add(Tuple.Create(“two”,“hoho”,false));
tests.Items.Add(Tuple.Create(“three”,“ohoh”,true));
字符串json=JsonConvert.SerializeObject(测试);
Console.WriteLine(json);
var obj=JsonConvert.DeserializeObject(json);
字符串objStr=obj.ToString();
控制台写入线(objStr);
}
}
总结
  • Tuple.Create(“own”,“hehe”,true)
    序列化为
    {“Item1”:“one”,“Item2”:“hehe”,“Item3”:true}

  • {“Item1”:“one”,“Item2”:“hehe”,“Item3”:true}
    可以反序列化回
    元组

  • Class Foo
    带有
    Tuple
    数据,可以序列化为json字符串,该字符串可以反序列化回
    Class Foo


如果您正在寻找简短的答案。我正在使用JsonConvert


我发了一封邮件。

感谢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());
    }
}
使用系统;
使用Newtonsoft.Json;
使用Newtonsoft.Json.Linq;
公共课程
{
公共静态void Main()
{
var testTuple=Tuple.Create(1234,“foo”,true);
var serialized=JsonConvert.serialized对象(testTuple);
Console.WriteLine(序列化);
JObject测试=((JObject)JsonConvert.DeserializeObject(序列化));
string strSerialized=JsonConvert.serialized对象(test);
//Tuple testTuple1=JsonConvert.DeserializeObject(序列化);//有效
Tuple testTuple1=JsonConvert.DeserializeObject(strSerialized);//有效
WriteLine(testTuple1.Item1.ToString());
}
}

希望有人会觉得这有帮助。

有趣的是:对于继承tuplen的类型来说,这似乎是失败的。另一件有趣的事:在某些情况下,为了处理继承问题,您需要编写自己的代码。老实说,我认为这个答案比投票最多的答案更有用。要说一个
元组
序列化为
{Item1:string,Item2:string}
,要比得票最多的回答者的答案更清楚、更直接。我怀疑这是因为OP的答案在这个答案之前有五年的时间收集选票:)
var testTuple = Tuple.Create(1234, "foo", true);
var serialized = JsonConvert.SerializeObject(testTuple);

Console.WriteLine(serialized);
// prints: {"Item1":1234,"Item2":"foo","Item3":true}
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());
    }
}