C# PR

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

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

はじめに

C#で人気のライブラリ「NewtonSoft Json.NET」を使って、JSONファイルの「読み込み」「デシリアライズ」をする方法を、できるだけ分かりやすく解説します。

記事内で説明している内容は、公式サイトのこのページをベースにしています。
「Json.NETってどんなもの?」という方は、こちらの記事をご覧ください。

環境

この記事では以下の環境を使用しています。

環境バージョンなど備考
VisualStudio   2019 Community 2017でも使用できます
.NET4.7.2
プロジェクト C# コンソールプログラム (.NET Framework) 
Json.net v12.0.3
OSWindows7

※ Json.NETのインストール方法についてはこちらの記事をご覧ください。

プログラム概要

今回解説するJSONファイルの読み込み・デシリアライズのプログラムの概要は以下の通りです。

  • デシリアライズ用の「データクラス」を作る
  • JSONファイルをオープンする
  • json.netの「Serializer」で「ファイル」をデシリアライズする
  • jsonデータにアクセス(コンソール出力)する。

実行結果

後述するコードで、以下のJSONファイルの「読み込み」「デシリアライズ」を行います。
(JSONファイルは、Cドライブ直下に保存してください)

{
  'Email': 'james@example.com',
  'Active': true,
  'CreatedDate': '2013-01-20T00:00:00Z',
  'Roles': [
    'User',
    'Admin'
  ]
}

実行すると、以下のようにJSONのデータをプログラム内で扱えるようになります。

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形式のデータの読み取り・デシリアライズする方法を解説しました。参考になればうれしいです。

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

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

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

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

Json.NETの他の使い方

このブログでは、Json.NETの他の使い方も解説しています。興味のある方は以下の記事もご覧ください。

JSONファイルの作成

JObjectを使用したパース

JSONデータと違う名前をメンバ変数につける方法

質問・要望 大歓迎です

「こんな解説記事作って」「こんなことがしたいけど、〇〇で困ってる」など、コメント欄で教えてください。 質問・要望に、中の人ができる限り対応します。

使えたよ・設定できたよの一言コメントも大歓迎。気軽に足跡を残してみてください。記事を紹介したい方はブログ、SNSにバシバシ貼ってもらってOKです。

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

COMMENT

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