JSON

【2021年版 Json.NET】Dictionaryのシリアライズ・デシリアライズを分かりやすく解説【C# json】

はじめに

C#で人気のライブラリ、NewtonSoft Json.NETを使って、データ用クラスを使わずに、DictionaryにJSONデータをシリアライズ・デシリアライズする方法を解説します。

この記事の内容
  • Dictionary から JSON形式 へのシリアライズ
  • JSON形式 から Dictionary へのデシリアライズ

この記事の対象読者
  • データ用クラスを作りたくない
  • Dictionaryへのシリアライズ・デシリアライズ方法を知りたい
  • サクッとピンポイントな内容だけ知りたい

記事内で説明している内容は、公式サイトの
シリアライズのページデシリアライズのページをベースにしています。

「Json.NETってそもそも何?」という方は、以下の短い記事をご覧ください。


環境

この記事の内容は、以下の環境で作成しています。

  • C# コンソールプログラム
  • .NET 4.7.2
  • Json.net v12.0.3

全体のコード

全体のコードと実行結果は以下の通りです。
ポイントとなるコードは、実行結果の後で説明しています。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using Newtonsoft.Json; // Json.netを使うのに必要です。


namespace ConsoleAppJsonDictionary
{
    class Program
    {
        static void Main(string[] args)
        {

            //
            // Dictionary --> JSONデータへのシリアライズ
            //

            // Dictionary型の変数を作成します
            Dictionary<string, int> points = new Dictionary<string, int>
            {
                { "James", 9001 },
                { "Jo"   , 3474 },
                { "Jess" , 11926 }
            };

            // DictionaryをJSONデータにシリアライズします
            string json = JsonConvert.SerializeObject(points, Formatting.Indented);

            // JSONデータを出力します
            Console.WriteLine(json + "\n");


            //
            // JSONデータ --> Dictionaryへのデシリアライズ
            //

            // JSONフォーマットの文字列を作成します
            // (サンプルから json2 に名前を変えています)
            string json2 = @"{
                                 'href'  : '/account/login.aspx',
                                 'target': '_blank'
                             }";

            // JSONデータからDictionaryにデシリアライズします
            Dictionary<string, string> htmlAttributes = JsonConvert.DeserializeObject<Dictionary<string, string>>(json2);

            // Dictionaryに格納後の内容を出力してみます。

            // href の中身を出力します
            Console.WriteLine(htmlAttributes["href"]);

            // target の中身を出力します
            Console.WriteLine(htmlAttributes["target"]);

            Console.WriteLine("\n何かキーを押すと終了");
            Console.ReadKey();

        }
    }
}

実行結果

前述したコードの実行結果です。以下の内容が出力されます。

  • Dictionaryからシリアライズした、インデント付のJSONデータ
  • デシリアライズしたDictionaryの、指定した要素の中身


コードのポイント

Dictionaryのシリアライズ

以下の一行で完了します。
今回は、Dictionaryのシリアライズに使用していますが、自作のデータクラスを渡すことも出来ます。

// DictionaryをJSONデータにシリアライズします
 string json = JsonConvert.SerializeObject(points, Formatting.Indented);

引数でのインデントの指定


1つ目の引数には、シリアライズするクラスの変数を指定しています。
2つ目の引数には、インデントの有無を指定します。種類は以下の2つのみです。

インデントなしFormatting.None
インデントありFromatting.Indented

Dictionaryのデシリアライズ

デシリアライズも以下の一行で完了します。
デシリアライズするDictionaryの型 (今回はStringのペア)とJSON形式の文字列を渡します。代入側にも同じ型を指定してください。

// JSONデータからDictionaryにデシリアライズします
Dictionary<string, string> htmlAttributes = JsonConvert.DeserializeObject<Dictionary<string, string>>(json2);

Dictionaryへのアクセス

デシリアライズにより、Dictionaryにペアが作成されています。
JSONの「変数名」(コロンの左側)を要素に指定することで、変数の値が取得できます。

// href の中身を出力します
 Console.WriteLine(htmlAttributes["href"]);

まとめ

C#で人気のライブラリ、NewtonSoft Json.NETを使って、データ用クラスを使わずに、DictionaryにJSONデータをシリアライズ・デシリアライズする方法を紹介しました。参考になればうれしいです。

応援・要望お待ちしてます

ブログを見ていて「この辺を詳しく知りたい」「このライブラリの使い方を知りたい」「こんなことで困ってる」...etc があれば、コメント・問い合わせ・Twitterで教えてください。質問・ご要望に合わせて解説記事を作ります。

ブログを気に入っていただけたり、「応援してもいいよ」という方がいたら、ブログやSNSでの紹介をお願いします。 あたたかい応援は、中の人の更新の大きな励みになります。

ABOUT ME
えす
現役のソフトウェアエンジニアです。 C++ C# Python を使ってます。10年ちょい設計/開発部門にいましたが、今はQAエンジニアっぽいことをしています。

COMMENT

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です