C#

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

はじめに

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

こんなことに使える

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

環境

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

bookfan 1号店 楽天市場店
¥1,980 (2022/11/19 22:15時点 | 楽天市場調べ)

プログラム概要

今回のプログラムの概要は以下の通りです。配列形式の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配列を読み込む(デシリアライズ)方法を解説しました。参考になればうれしいです。

【おすすめ】UdemyでC#のスキルを上げる

C#のスキルを上げるには、Udemyの動画講座がおすすめです。「C#で読みやすいコードを書く50の方法」「保守性の高いコードの書き方」など、脱初心者/スキルアップのための講座が多数公開されています。

1講座 2440円程度で返金保証あり。視聴期間も無制限なので「自分のペースでコスパ良くスキルアップしたい」「失敗したくない」とお悩み方におすすめです。

⇒ C#の講座一覧はこちら
icon

bookfan 1号店 楽天市場店
¥1,980 (2022/11/19 22:15時点 | 楽天市場調べ)

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

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

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

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

COMMENT

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