はじめに
C#で人気のライブラリ「NewtonSoft Json.NET」を使って、JSONファイルの「読み込み」・「デシリアライズ」をする方法を、できるだけ分かりやすく解説します。
記事内で説明している内容は、公式サイトのこのページをベースにしています。
「Json.NETってそもそも何?」という方は、以下の記事をご覧ください。
Json.NETのインストール方法についてはこちらの記事をご覧ください。
環境
この記事では以下の環境を使用しています。
環境 | バージョンなど | 備考 |
VisualStudio | 2019 Community | 2017でも使用できます |
.NET | 4.7.2 | |
プロジェクト | C# コンソールプログラム (.NET Framework) | |
Json.net | v12.0.3 | |
OS | Windows7 |
実行結果
後述するコードで、以下のJSONファイルの「読み込み」「デシリアライズ」を行います。
(JSONファイルは、Cドライブ直下に保存してください)
{
'Email': 'james@example.com',
'Active': true,
'CreatedDate': '2013-01-20T00:00:00Z',
'Roles': [
'User',
'Admin'
]
}
実行すると、以下のように各変数にJSONのデータがシリアライズされて格納されます。
全体コード
JSONファイルの「読み込み」「デシリアライズ」を行うコードは以下の通りです。詳細は「コードのポイント」で解説します。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO; // ファイル読み込みに必要です
using Newtonsoft.Json; // Json.net用に必要です
namespace ConsoleApp_testJsonNet
{
//
// デシリアライズ用のデータクラスです
//
public class Account
{
public string Email { get; set; }
public bool Active { get; set; }
public DateTime CreatedDate { get; set; }
public IList<string> Roles { get; set; }
}
class Program
{
//
// 注意:
// Cドライブの直下に、test.jsonのファイルが保存済みであることを前提にしています。
//
static void Main(string[] args)
{
// デシリアライズしたデータを入れる、入れ物です
Account account = null;
try
{
//
// jsonファイルを読み込みます
//
using (StreamReader file = File.OpenText(@"C:\test.json") )
{
// Json.netのオブジェクトを作成します
JsonSerializer serializer = new JsonSerializer();
// デシリアライズ関数に
// 読み込んだファイルと、データ用クラスの名称(型)を指定します。
//
// デシリアライズされたデータは、自動的にaccountの
// メンバ変数に格納されます
//
account = (Account)serializer.Deserialize(file, typeof(Account));
}
// 表示してみます
Console.WriteLine("Email : " + account.Email);
Console.WriteLine("Active: " + account.Active);
Console.WriteLine("Date : " + account.CreatedDate);
foreach( string role in account.Roles)
{
Console.WriteLine("Roles : " + role);
}
}
catch
{
Console.WriteLine("ファイル読み込み時に例外が発生しました。");
}
Console.WriteLine("キーを押すと終了します");
Console.ReadKey();
}
}
}
コードのポイント
JSONと同じ名称・型のクラスを作る
JSONのデータを格納するクラスを定義します。メンバ変数の「名称」と「型」はJSONと同一になるように定義します。型についてはJSONデータが日付の場合は「DateTime型」、配列の場合は「IList<>」型で定義しておきます。
メンバの名称と型を合わせておくことで、後述の「 Deserialize関数」を呼ぶだけでデシリアライズを行うことができます。
//
// デシリアライズ(Jsonデータを受け取る)のためのデータ用クラスです
//
public class Account
{
public string Email { get; set; }
public bool Active { get; set; }
public DateTime CreatedDate { get; set; }
public IList<string> Roles { get; set; }
}
JSONデータの名称が日本語の場合や、記法が異なって気持ち悪い場合はメンバに別名を付けうることもできます。別名の付け方については以下の記事をご覧ください。
読み込みはOPENするだけ
JSONファイルの読み込みは、テキストファイルと同じように「StreamReader」でファイルをOPENするだけで完了します。
using (StreamReader file = File.OpenText(@"C:\test.json") )
{
// この中で、読み込んだファイルを処理します。
}
Deserialize関数を呼ぶだけで、デシリアライズ完了
ファイルをOPENしたusingの中で、Json.netの 「serializer」 を作成します。
「serializer」のDeserialize関数に「OPENしたStreamReader」と「デシリアライズするクラスの型名」を渡すだけで、デシリアライズ完了です。
using (StreamReader file = File.OpenText(@"C:\test.json") )
{
// Json.netのオブジェクトを作成します
JsonSerializer serializer = new JsonSerializer();
// デシリアライズ関数に
// 読み込んだファイルと、データ用クラスの名称(型)を指定します。
//
// デシリアライズされたデータは、自動的にaccountの
// 各メンバ変数に格納されます
//
account = (Account)serializer.Deserialize(file, typeof(Account));
}
まとめ
C#で人気のライブラリ、NewtonSoft Json.NETで、JSON形式のデータの読み取り・デシリアライズする方法を解説しました。参考になればうれしいです。
Lenovo Web広告限定ストア
エキスパートがよく使う「ThinkPad」や、コスパ抜群の「IdeaPad」がお得に購入できます。そろそろ、Macに負けない機能的なデザイン、フルカスタマイズしたPCが欲しい!とい方は以下のリンクからお得に購入してください。特別割引価格やクーポン情報がGETできます。
C#がよく分からないんだけど…という方へ
「プログラミングを初めてみたい」「専門書を読んだけど分からなかった」という方に以下の書籍をオススメします。
「知識ゼロから始める人」「一度挫折した経験がある人」向けに書かれた「とても分かりやすい」というレビューが多い一冊です。
超初心者~中級の内容を「利用頻度の高いものに絞って」解説していて、時間のない人でも効率的に学習することができます。
高額なことが多い専門書の中でもコスパのいい本なので、ぜひこの本で「C#のライブラリをスラスラ使いこなせる自分」を目指してみてください。
Json.NETの他の使い方も
このブログでは、Json.NETの他の使い方も解説しています。興味のある方は以下の記事もご覧ください。
JSONファイルの作成
JObjectを使用したパース
JSONデータと違う名前をメンバ変数につける方法
応援・要望お待ちしてます
ブログを見ていて「この辺を詳しく知りたい」「このライブラリの使い方を知りたい」「こんなことで困ってる」...etc があれば、コメント・問い合わせ・Twitterで教えてください。質問・ご要望に合わせて解説記事を作ります。
ブログを気に入っていただけたり、「応援してもいいよ」という方がいたら、ブログやSNSでの紹介をお願いします。 あたたかい応援は、中の人の更新の大きな励みになります。