はじめに
C#で人気のライブラリ、NewtonSoft Json.NETを使って、「JSONデータを作成する方法」を分かりやすく解説します。
記事内で説明している内容は、公式サイトのこのページをベースにしています。
Json.NETってそもそも何?という方は、以下の短い記事をご覧ください。
JSon.NETのインストール方法についてはこちらの記事をご覧ください。
環境
この記事の内容は、以下の環境で作成しています。
環境 | バージョンなど | 備考 |
VisualStudio | 2019 Community | 2017でも使用できます |
.NET | 4.7.2 | |
プロジェクト | C# コンソールプログラム (.NET Framework) | |
Json.net | v12.0.3 | |
OS | Windows7 | Windows10でも使用できます |
実行結果
後述する「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ファイルにするデータを一つのクラスにまとめます。クラスのメンバ変数名がJSONファイル変数名(Name:Valueの、Name側)としてそのまま使用されます。
配列や日付の入ったJSONファイルを作成する場合は、メンバ変数をIList<>型や、DateTime型で定義します。
//
// シリアライズ済みデータ(文字列)をファイルに書き込みます
//
File.WriteAllText(@"C:ProgramDataAccount.json", 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"
}
};
シリアライズ
以下の一行でシリアライズが完了します。引数目の1つ目にはJSONに前述したデータ用クラスのオブジェクトを指定します。二つ目の引数では作成するJSONファイルのインデントの方式を指定します。
シリアライズが完了すると、「JSON形式の文字列」が返されます。
string json = JsonConvert.SerializeObject(account, Formatting.Indented);
引数でのインデントの指定
1つ目の引数には、シリアライズするクラスの変数を指定しています。
2つ目の引数には、インデントの有無を指定します。種類は以下の2つのみです。
インデントなし | Formatting.None |
インデントあり | Fromatting.Indented |
ファイル出力
「JSON形式の文字列」をファイルに書き込みます。シリアライズの時点でJSONの形式に成形されているため、そのままファイルに書き込むことでJSONファイルが作成できます。
//
// シリアライズ済みデータ(文字列)をファイルに書き込みます
//
File.WriteAllText(@"C:ProgramDataAccount.json", json);
まとめ
C#で人気のライブラリ、NewtonSoft Json.NETを使って、JSONファイルを作成する方法を紹介しました。参考になればうれしいです。
C#がよく分からないんだけど…という方へ
「プログラミングを初めてみたい」「専門書を読んだけど分からなかった」という方に以下の書籍をオススメします。
「知識ゼロから始める人」「一度挫折した経験がある人」向けに書かれた「とても分かりやすい」というレビューが多い一冊です。
超初心者~中級の内容を「利用頻度の高いものに絞って」解説していて、時間のない人でも効率的に学習することができます。
高額なことが多い専門書の中でもコスパのいい本なので、ぜひこの本で「C#のライブラリをスラスラ使いこなせる自分」を目指してみてください。
もっと詳しくJson.NETを知りたい
このブログでは、Json.NETの以下内容も解説してます。興味のある方は以下からご覧ください。
Dictionaryのシリアライズ・デシリアライズ
JObjectを使用したパース
JSONデータと違う名前をメンバ変数につける方法
応援・要望お待ちしてます
ブログを見ていて「この辺を詳しく知りたい」「このライブラリの使い方を知りたい」「こんなことで困ってる」...etc があれば、コメント・問い合わせ・Twitterで教えてください。質問・ご要望に合わせて解説記事を作ります。
ブログを気に入っていただけたり、「応援してもいいよ」という方がいたら、ブログやSNSでの紹介をお願いします。 あたたかい応援は、中の人の更新の大きな励みになります。