2022年5月1日

C# JSONファイルの読込み

JSONファイルを読み込みListに格納する方法について説明します。

JSONファイルとは

JSON(JavaScript Object Notation)はプログラミング言語のJavaScriptで用いられていたデータ集合の記述形式を汎用のデータ形式として標準化したもので、様々なデータ型やデータ構造を組み合わせて複雑なデータ集合を定義できるものです。

[
  {
    "Id": 1,
    "Name": "リンゴ",
    "Disp": 1
  },
  {
    "Id": 2,
    "Name": "みかん",
    "Disp": 1
  },
  {
    "Id": 3,
    "Name": "バナナ",
    "Disp": 1
  },
  {
    "Id": 4,
    "Name": "マンゴー",
    "Disp": 1
  }
]

JSONファイルの読込み

JSONのパースを行うライブラリとしては以下のものが良く使われています。いずれもNugetからインストールできます。

  • Newtonsoft Json.NET
  • System.Text.Json

Nugetでのインストール方法

今回はVisual Studio 2017 でのインストールとします。

  1. ツール > NuGetパッケージマネージャー > ソリューションのNuGetパッケージの管理 を選択。
  2. 参照タブをクリック。
  3. 検索ボックスに「json」と入力するといくつかのライブラリが表示されます。
  4. Newtonsoft Json.NETを選択します。
  5. インストールするプロジェクトを選択し、最新の安定版を選択して、インストールボタンをクリック。

データクラスを定義

Data.csというデータクラスをプロジェクトに追加します。

namespace WpfApp1
{
	class Data
	{
		public int Id { get; set; }
		public string Name { get; set; }
		public int Disp { get; set; }
	}
}

JSONデータのデシリアイズ

c:\test.jsonファイルを読み込んでList変数にセットします。(WPFプロジェクト)

using System.Collections.Generic;
using System.Text;
using System.Windows;
using Newtonsoft.Json;
namespace WpfApp1
{
	/// <summary>
	/// MainWindow.xaml の相互作用ロジック
	/// </summary>
	public partial class MainWindow : Window
	{
		public MainWindow()
		{
			InitializeComponent();
		}
		private void Button_Click(object sender, RoutedEventArgs e)
		{
			string filePath = @"c:\test.json";
			
			List<Data> jsonData;
			Encoding enc = Encoding.UTF8;
			using (var reader = new System.IO.StreamReader(filePath, enc))
			{
				string jsonStr = reader.ReadToEnd();
				jsonData = JsonConvert.DeserializeObject<List<Data>>(jsonStr);
			}
		}
	}
}

jsonData変数にtest.jsonの値がセットされていることが確認できます。

とても簡単ですね。Newtonsoft Json.NETは複雑なjsonファイルにも対応しているので、非常に便利です。

複雑なjsonファイルを読み込む際に、データクラスのつくり方を間違ってしまうとエラーとなります。複雑な構造のjsonファイル格納するためのデータクラスを作るためのツールがあります。一度使って非常に助かったのでリンクを紹介します。

Convert Json to C# Classes Online

Share this content: