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