はじめに
C#で人気のライブラリ、NewtonSoft Json.NETで、Dictionaryを使ってシリアライズ・デシリアライズを行う方法を解説します。
Dictionaryを使うことで、「データ用クラスを作成せずに」JSONデータのシリアライズ・デシリアライズをすることができます。「文字列:文字列」「文字列:数値」など、シンプルなペアで構成されたJSONデータを扱う際におすすめの方法です。
記事内で説明している内容は、公式サイトの
シリアライズのページ、デシリアライズのページをベースにしています。
「Json.NETってそもそも何?」という方は、以下の短い記事をご覧ください。
Json.NETのインストール方法についてはこちらの記事をご覧ください。
環境
この記事の内容は、以下の環境で作成しています。
環境 | バージョンなど | 備考 |
VisualStudio | 2019 Community | 2017でも使用できます |
.NET | 4.7.2 | |
プロジェクト | コンソール(.NET Framework) | |
Json.NET | 12.0.3 | |
OS | Windows10 |
実行結果
後述する「Dictionaryを使ったシリアライズ・デシリアライズ」のコードの実行結果は以下の通りです。
上の段は、Dictonaryのデータを、JSON形式の文字列にシリアライズした結果です。
文字列をそのままファイルに書き込むことで、JSONファイルを作成できます。
下の段はコード内のJSON形式の文字列を、Dictionaryにデシリアライズした結果です。
JSONデータの各データ名称を、そのままDictionaryの要素名として使用することができます。

全体のコード
「Dictionaryを使ったシリアライズ・デシリアライズ」のコードは以下の通りです。
ポイントとなる部分を「コードのポイント」で詳細に解説します。
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("--- Dictonaryから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に格納後の内容を出力してみます。
Console.WriteLine("--- JSONデータからDictonaryに変換したデータの表示です ---\n");
// href の中身を出力します
Console.WriteLine("hrefのデータ内容 : " + htmlAttributes["href"]);
// target の中身を出力します
Console.WriteLine("targetのデータ内容: " + htmlAttributes["target"]);
Console.WriteLine("\n何かキーを押すと終了します");
Console.ReadKey();
}
}
}
コードのポイント
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と同じ変数名の要素」が生成されるため、JSONの変数名(コロンの左側)をそのまま使用してデータにアクセスすることができます。
// href の中身を出力します
Console.WriteLine("hrefのデータ内容 : " + htmlAttributes["href"]);
まとめ
C#で人気のライブラリ、NewtonSoft Json.NETを使って、データ用クラスを使わずに、DictionaryにJSONデータをシリアライズ・デシリアライズする方法を紹介しました。参考になればうれしいです。
【おすすめ】UdemyでC#のスキルを上げる
C#のスキルを上げるには、Udemyの動画講座がおすすめです。「C#で読みやすいコードを書く50の方法」「保守性の高いコードの書き方」など、脱初心者/スキルアップのための講座が多数公開されています。
1講座 2440円程度で返金保証あり。視聴期間無制限なので「自分のペースでコスパ良くスキルアップしたい」「失敗したくない」という方におすすめです。
もっと詳しくJson.NETを知る
このブログでは、Json.NETの他の使い方についても解説しています。よろしければ以下の記事もご覧ください。
JSONの読み込み・デシリアライズ
JObjectを使用したパース
JSONデータと違う名前をメンバ変数につける方法
質問・要望 大歓迎です
「こんな解説記事作って」「こんなことがしたいけど、〇〇で困ってる」など、コメント欄で教えてください。 質問・要望に、中の人ができる限り対応します。
使えたよ・設定できたよの一言コメントも大歓迎。気軽に足跡を残してみてください。記事を紹介したい方はブログ、SNSにバシバシ貼ってもらってOKです。