lisz-works

プログラミングと興味を貴方に

C# DataContractJsonSerializerで配列JSONを扱う!

【スポンサーリンク】

C#

C#でJSONのシリアライズ/デシリアライズができるライブラリ「DataContractJsonSerializer」。

www.lisz-works.com

「そういえば、配列が入ったJSONだとどうなるんだ?」

と思い、試してみました!

結論

結論から言うと、やることは変わらないです。

前回からちょっと変えてあげれば、もう配列に対応できます。

シリアライズ

クラス配列を使った一例です。

このように、クラスを単品で使用した時と代わりありません。

public string Serialize(Data[] datas)
{
    string json = "";
    using ( var ms = new MemoryStream() )
    using ( var sr = new StreamReader(ms) )
    {
        DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(Data[]));
        serializer.WriteObject(ms, datas);
        ms.Position = 0;

        json = sr.ReadToEnd();

        WriteLine($"{json}");
    }
    return json;
}

クラス配列でなくても

  • List

のように、List型でも同様です。

「Data[]」のように書かれている箇所を、「List」のように変えてあげればOKです。

この2箇所ですね。

public string Serialize(Data[] datas)
        DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(Data[]));

作成されたJSONはこのようになります。

[{"name":"solt","size":10,"type":1},{"name":"oil","size":5,"type":2},{"name":"coffee","size":30,"type":3}]

デシリアライズ

こちらもクラス配列を使用した一例です。

結果が配列なので、表示をループ化しているところ以外は、シリアライズ同様、単品と代わりありません。

public void Deserialize(string json)
{
    using ( var ms = new MemoryStream(Encoding.UTF8.GetBytes(json)) )
    {
        var sr = new DataContractJsonSerializer(typeof(Data[]));
        var datas = (Data[])sr.ReadObject(ms) as Data[];
        foreach ( var data in datas )
        {
            Console.WriteLine("type=" + data.type + ", name=" + data.name + ", size=" + data.size);
        }
    }
}

シリアライズ同様、「Data[]」のように書かれている箇所を、「List」のように変えてあげれば、Listも対応できます。

具体的には、この2行です。

        var sr = new DataContractJsonSerializer(typeof(Data[]));
        var datas = (Data[])sr.ReadObject(ms) as Data[];

結果はこのように表示されました。

type=3, name=short, size=2 type=2, name=uchar, size=1 type=11, name=float, size=4

あとがき

C#で、DataContractJsonSerializerを使って、配列が入ったJSONを、シリアライズ/デシリアライズする方法でした!

実は試してみて、「いや、普通にやるのと変わらないんかい……」となったので、記事にするか迷いました……

でも、自分が「どうなんだう」と思ったので、記録として残しました。

コレを見て、ぼく同様

「いや、普通にやるのと変わらないんかい……」

となった方。

これで記憶に定着しますね!(笑)

DataContractJsonSerializerの使い方についての記事はコチラ。

www.lisz-works.com