はじめに
C#で人気のライブラリ NewtonSoft Json.NETで、JSON配列を読み込む(デシリアライズ)方法を解説します。結論から言うと、データ用クラスを作成して、Json.NETの関数を呼ぶだけで簡単にデシリアライズができます。詳しくは以下の解説をご覧ください。
配列形式のJSONデータを読み込み(デシリアライズ)する。
環境
環境 | バージョン | 備考 |
VisualStudio | 2019 Community | 2017でもOK |
.NET | 4.7.2 | |
プロジェクト | コンソールアプリケーション(.NET Framework) |
プログラム概要
今回のプログラムの概要は以下の通りです。配列形式のJSONデータをファイルから読み込んで、デシリアライズします。
- データクラスを作成する
- JSONファイルを読み込む
- JSONファイルの内容を、データクラスにデシリアライズする
- デシリアライズした内容を表示する
読み込むJSONファイル
JSONファイルの内容は以下の通りです。Roles(役割)というJSON配列が記載されています。
{
'Roles': [
'User',
'Admin',
'UserA',
'UserB',
'UserC',
]
}
後述するプログラムを実行する際は、上記JSONファイルをCドライブの下においてください
非配列のデータ・日付データなど、複数の形式の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用に必要です
//
// 注意: Cドライブの直下に「test.json」を置いてください
//
namespace ConsoleJsonDeserializeArray
{
//
// デシリアライズ用のデータクラスです
//
public class Account
{
public IList<string> Roles { get; set; }
}
class Program
{
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)serializer.Deserialize(file, typeof(Account));
}
// Linqに対応しているので、以下のようにforeachが使えます
foreach (string role in account.Roles)
{
Console.WriteLine("Roles : " + role);
}
}
catch
{
Console.WriteLine("ファイル読み込み時に例外が発生しました。");
}
Console.WriteLine("キーを押すと終了します");
Console.ReadKey();
}
}
}
コードのポイント
データクラスの作成
JSONファイルの内容を格納するデータクラスを作成します。JSON配列を格納する場合は、IList<>型で定義します。<>の中は数値など、JSONファイルの内容によって変えます。今回は文字列なので「string」で定義します。
//
// デシリアライズ用のデータクラスです
//
public class Account
{
public IList<string> Roles { get; set; }
}
ファイルのオープン
テキストファイルと同様に、JSONファイルをOpenします。
// jsonファイルを読み込みます
using (StreamReader file = File.OpenText(@"C:\test.json"))
{
// **** 略 ****
}
デシリアライズ
Json.netのオブジェクトを作成し、Deserialize関数を使ってデシリアライズします。
Deserialize関数には、オープンしたファイルのオブジェクト、データクラスの型(クラス名)を指定します。また、Deserialize数の戻り値を変換するため、先頭にキャスト「(Account)」を記載しておきます。
// Json.netのオブジェクトを作成します
JsonSerializer serializer = new JsonSerializer();
// デシリアライズ関数に読み込んだファイルと、
// データ用クラス型を指定します。
account = (Account)serializer.Deserialize(file, typeof(Account));
内容の表示
読み取ったJSONデータの内容を表示します。
IList<>型にしているので、foreach文で配列のデータにアクセスできます。
foreach (string role in account.Roles)
{
Console.WriteLine("Roles : " + role);
}
まとめ
C#で人気のライブラリNewtonSoft Json.NETで、JSON配列を読み込む(デシリアライズする)方法を解説しました。参考になればうれしいです。
お知らせ
今月号のSoftware Designは「もっとTypeScriptの力を引き出そう」
JavaScriptの拡張言語でしょ?と思っているかたへ、Union型などTypeScriptの持つ秘めたる力を解説する特集となっています。
個人的には第2特集の「Ubuntuの現代的な使い方」がの方が気になりました。より詳しい内容は以下のリンクからご覧ください。
質問・要望 大歓迎です
「こんな解説記事作って」「こんなことがしたいけど、〇〇で困ってる」など、コメント欄で教えてください。 質問・要望に、中の人ができる限り対応します。
使えたよ・設定できたよの一言コメントも大歓迎。気軽に足跡を残してみてください。記事を紹介したい方はブログ、SNSにバシバシ貼ってもらってOKです。