55

Tuple<T1, T2, T3, ...>のシリアル化と逆シリアル化の方法に興味があります。「json」と「tuple」というキーワードで検索しましたが、欲しいものが見つかりませんでした。

4

4 に答える 4

53

Json.netでテストしましUnitTestた。テスト コードは次のとおりです。結果は、シリアライズ可能およびデシリアライズ可能であることを示しています。したがって、アプリケーションでそれらを使用できます。Tuple<T1,T2,T3,...>

テストコード

public class Foo {
    public List<Tuple<string, string, bool>> Items { get; set; }

    public Foo()
    {
        Items = new List<Tuple<string, string, bool>>();
    }

    public override string ToString()
    {
        StringBuilder sb = new StringBuilder();
        foreach (var a in Items)
        {
            sb.Append(a.Item1 + ", " + a.Item2 + ", " + a.Item3.ToString() + "\r\n");
        }
        return sb.ToString();
    }
}

[TestClass]
public class NormalTests
{
    [TestMethod]
    public void TupleSerialization()
    {
        Foo tests = new 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));

        string json = JsonConvert.SerializeObject(tests);
        Console.WriteLine(json);

        var obj = JsonConvert.DeserializeObject<Foo>(json);
        string objStr = obj.ToString();
        Console.WriteLine(objStr);
    }
}

概要

  • Tuple.Create("own","hehe",true)にシリアライズ {"Item1":"one","Item2":"hehe","Item3":true}

  • {"Item1":"one","Item2":"hehe","Item3":true}デシリアライズして戻すことができますTuple<string,string, bool>

  • Class FooデータをTuple使用すると、json 文字列にシリアル化でき、文字列を逆シリアル化してClass Foo.

于 2013-04-19T09:10:55.227 に答える
1

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

誰かがこれが役立つことを願っています。

于 2020-05-08T10:53:53.820 に答える