C# PR

【C# Newtonsoft.Json】JSON配列の読み込み・デシリアライズ方法を分かりやすく解説

記事内に商品プロモーションを含む場合があります

はじめに

C#で人気のライブラリ NewtonSoft Json.NETで、JSON配列を読み込む(デシリアライズ)方法を解説します。結論から言うと、データ用クラスを作成して、Json.NETの関数を呼ぶだけで簡単にデシリアライズができます。詳しくは以下の解説をご覧ください。

こんなことに使える

配列形式のJSONデータを読み込み(デシリアライズ)する。

環境

環境 バージョン 備考
VisualStudio 2019 Community 2017でもOK
.NET 4.7.2
プロジェクト コンソールアプリケーション(.NET Framework) 

プログラム概要

今回のプログラムの概要は以下の通りです。配列形式のJSONデータをファイルから読み込んで、デシリアライズします。

  1. データクラスを作成する
  2. JSONファイルを読み込む
  3. JSONファイルの内容を、データクラスにデシリアライズする
  4. デシリアライズした内容を表示する

読み込むJSONファイル

JSONファイルの内容は以下の通りです。Roles(役割)というJSON配列が記載されています。

{
  'Roles': [
    'User',
    'Admin',
    'UserA',
    'UserB',
    'UserC',
  ]
}

後述するプログラムを実行する際は、上記JSONファイルをCドライブの下においてください

非配列のデータ・日付データなど、複数の形式のJSONデータがの読み込み方法はこちらで解説しています。

実行結果

後述するコードの実行結果は以下の通りです。

JSON配列をデシリアライズするこーdの実行結果

全体コード

全体コードは以下の通りです。詳細な内容は後述する「コードのポイント」で解説します。

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です。

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

COMMENT

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