C# PR

【C# Newtonsoft.Json】JSONファイルの作成方法を分かりやすく解説

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

はじめに

C#で人気のライブラリ、NewtonSoft Json.NETを使って、「JSONデータを作成する方法」を分かりやすく解説します。

記事内で説明している内容は、公式サイトのサンプルをベースにしています。
Json.NETってそもそも何?という方は、以下の紹介記事からをご覧ください。

JSon.NETのインストール方法については以下の記事をご覧ください。

環境

この記事の内容は、以下の環境で作成しています。

環境 バージョンなど 備考
VisualStudio 2019 Community 2017でもOK
.NET 4.7.2
プロジェクトの形式

C# コンソールプログラム
(.NET Framework) 

Json.net
OS Windows7 Win10, 11 でもOK

実行結果

後述する「JSONファイル作成するコード」の実行結果です。Cドライブの「ProgramDataフォルダ」に以下のJSONファイルが作成されます。

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

全体コード

「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_jsonTest2
{

    //
    // シリアライズ用のデータクラスです
    //
    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
    {
        static void Main(string[] args)
        {

            //
            // データ用のクラスオブジェクトを作成します。
            //
            Account account = new Account
            {
                Email = "james@example.com",
                Active = true,
                CreatedDate = new DateTime(2013, 1, 20, 0, 0, 0, DateTimeKind.Utc),
                Roles = new List<string>
                {
                    "User",
                    "Admin"
                }
            };

            //
            // 作成したオブジェクトのデータをJSONにシリアライズします
            // 一つ目に引数に、シリアライズするオブジェクトを指定します
            // 二つ目に引数に、インデントの有無を指定します。
            //
            string json = JsonConvert.SerializeObject(account, Formatting.Indented);

            //
            // シリアライズ済みデータ(文字列)をファイルに書き込みます
            //
            File.WriteAllText(@"C:\ProgramData\Account.json", json);
        }
    }
}

コードのポイント

データ用クラスの定義

Json.NETで、JSONを作成するには「Email」や「CreateDate」など、JSONに書き込みたい内容をクラスとして定義する必要があります。

配列や日付の入ったJSONファイルを作成する場合は、IList<>型や、DateTime型のメンバ変数を作成してください。

ここで定義した「クラスのメンバ変数名」が「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の変数名」を別にしたい場合は『JsonProperty』を使います。詳しくはこちらの記事を参照してください。

JSON用のデータの作成

定義したクラスにデータをセットしてクラスオブジェクト(変数)を作成します。

Emailのアドレスなど、ここでセットした内容が「JSONファイルの各変数のデータ」として使われます。

            Account account = new Account
            {
                Email = "james@example.com",
                Active = true,
                CreatedDate = new DateTime(2013, 1, 20, 0, 0, 0, DateTimeKind.Utc),
                Roles = new List<string>
                {
                    "User",
                    "Admin"
                }
            };

JSONファイル用の文字列の作成

クラスオブジェクトからJSON形式の文字列を生成します(シリアライズ)。

引数目の1つ目には、前述したデータ用クラスのオブジェクト、二つ目には、作成するJSONファイルのインデント方式を指定します。

シリアライズが完了すると、「JSON形式の文字列」が返されます。

string json = JsonConvert.SerializeObject(account, Formatting.Indented);

インデントの方式


インデント方式は以下の2種類です。

インデントなしFormatting.None
インデントありFromatting.Indented

ファイル出力

前述した「JSON形式の文字列」をファイルに書き込みます。文字列はすでにJSON形式になっているので、そのままファイルに書き込むだけでOKです。

            //
            // シリアライズ済みデータ(文字列)をファイルに書き込みます
            //
            File.WriteAllText(@"C:ProgramDataAccount.json", json);

まとめ

C#で人気のライブラリ、NewtonSoft Json.NETを使って、JSONファイルを作成する方法を紹介しました。参考になればうれしいです。

お知らせ

今月号の『Software Design』はドメイン駆動設計(DDD)。実例を交えたDDDの手法の解説が特集されています。

編集:Software Design 編集部
¥1,562 (2024/03/13 12:59時点 | Amazon調べ)
\楽天ポイント4倍セール!/
楽天市場

もっと詳しくJson.NETを知りたい

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

Dictionaryのシリアライズ・デシリアライズ

JObjectを使用したパース

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

質問・要望 大歓迎です

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

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

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

COMMENT

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