\

【超簡単】c#でJSONを読み書きする方法

c#でJSONファイルに変換したり、JSONファイルを読み込む方法について紹介したいと思います。

使用するアセンブリ

この記事では System.Text.Json を使用しています。

そのため、ソースコードの先頭に以下を記述します。

1
using System.Text.Json;

クラスオブジェクトをJSONに変換する

以下のようなクラスがあったとします。

1
2
3
4
5
class Data {
public int id {get; set;}
public string name {get; set;}
public string dept { get; set;}
}

このクラスに値をセットして、JSONに出力するソースコードは以下になります。

1
2
3
4
5
6
7
8
9
10
11
12
static void JsonSer()
{
Data data = new Data();

data.id = 1;
data.name = "john";
data.dept = "Purchase";

string jsonStr = JsonSerializer.Serialize(data);
Console.WriteLine(jsonStr);

}

Dataクラスを dataとしてオブジェクトを作成して、値をセットします。

1
2
3
4
5
Data data = new Data();

data.id = 1;
data.name = "john";
data.dept = "Purchase";

シリアライズ(JSON形式に変換)し、string型変数に格納します。

1
string jsonStr = JsonSerializer.Serialize(data);

以下のように出力されれば、成功です。

1
{"id":1,"name":"john","dept":"Purchase"}

配列のクラスオブジェクトをJSONに変換する

配列オブジェクトも簡単にシリアライズできます。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
static void JsonSerArray()
{
Data[] data = new Data[3];

data[0] = new Data();
data[0].id = 1;
data[0].name = "john";
data[0].dept = "Purchase";

data[1] = new Data();
data[1].id = 2;
data[1].name = "Mickey";
data[1].dept = "Sales";

data[2] = new Data();
data[2].id = 3;
data[2].name = "Donald";
data[2].dept = "Planning";

string jsonStr = JsonSerializer.Serialize(data);
Console.WriteLine(jsonStr);

}

以下のように出力されれば、成功です。

1
[{"id":1,"name":"john","dept":"Purchase"},{"id":2,"name":"Mickey","dept":"Sales"},{"id":3,"name":"Donald","dept":"Planning"}]

JSONを読み込み、クラスオブジェクトに格納する方法

今度は逆にJSONをファイルから読み込み、クラスオブジェクトに格納してみます。

1
2
3
4
5
6
7
8
9
10
11
12
13
static void readJson()
{

string jsonStr = ReadAllLine("jsonStr.json", "utf-8");

Data jsonData = new Data();
jsonData = JsonSerializer.Deserialize<Data>(jsonStr);

Console.WriteLine($"jsonData.id = {jsonData.id}");
Console.WriteLine($"jsonData.name = {jsonData.name}");
Console.WriteLine($"jsonData.dept = {jsonData.dept}");

}

読み込むファイルjsonStr.jsonの中身は、以下のとおりです。

1
{"id":1,"name":"john","dept":"Purchase"}

ReadAllLine関数は、ファイルを全行読み込む処理を行います。

1
2
3
4
5
6
7
8
public static string ReadAllLine(string filePath, string encodingName)
{
StreamReader sr = new StreamReader(filePath, Encoding.GetEncoding(encodingName));
string allLine = sr.ReadToEnd();
sr.Close();

return allLine;
}

JSONデータを読み込み(デシリアライズ)するには、JsonSerializer.Deserialize<T>を使用します。

1
jsonData = JsonSerializer.Deserialize<Data>(jsonStr);

以下のように標準出力に出力されれば成功です。

1
2
3
jsonData.id = 1
jsonData.name = john
jsonData.dept = Purchase

配列型JSONを読み込み、クラスオブジェクトに格納する方法

今度は配列型のJSONをデシリアライズしてみます。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
static void readJsonArray()
{

string jsonStr = ReadAllLine("jsonStrArray.json", "utf-8");
Console.WriteLine(jsonStr);

Data[] jsonData = new Data[3];
jsonData = JsonSerializer.Deserialize<Data[]>(jsonStr);

foreach(Data item in jsonData)
{
Console.WriteLine($"jsonData.id = {item.id}");
Console.WriteLine($"jsonData.name = {item.name}");
Console.WriteLine($"jsonData.dept = {item.dept}");
}

}

読み込むファイルjsonStrArray.jsonの中身は以下のとおりです。

1
[{"id":1,"name":"john","dept":"Purchase"},{"id":2,"name":"Mickey","dept":"Sales"},{"id":3,"name":"Donald","dept":"Planning"}]

このデータは配列要素が3つありますので、Dataクラスオブジェクトを要素3の配列として定義します。

1
Data[] jsonData = new Data[3];

デシリアライズする際の型はData[]になります。

1
jsonData = JsonSerializer.Deserialize<Data[]>(jsonStr);

以下のように出力されれば成功です。

1
2
3
4
5
6
7
8
9
jsonData.id = 1
jsonData.name = john
jsonData.dept = Purchase
jsonData.id = 2
jsonData.name = Mickey
jsonData.dept = Sales
jsonData.id = 3
jsonData.name = Donald
jsonData.dept = Planning

ソースコード全文

この記事を書くにあたって使用したソースコードの全文を記載します。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
using System;
using System.Text.Json;
using System.IO;
using System.Text;


namespace csjson
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
readJsonArray();
}

class Data {
public int id {get; set;}
public string name {get; set;}
public string dept { get; set;}
}

static void JsonSer()
{
Data data = new Data();

data.id = 1;
data.name = "john";
data.dept = "Purchase";

string jsonStr = JsonSerializer.Serialize(data);
Console.WriteLine(jsonStr);
writeFile("utf-8", "jsonStr.json", jsonStr);

}

static void JsonSerArray()
{
Data[] data = new Data[3];

data[0] = new Data();
data[0].id = 1;
data[0].name = "john";
data[0].dept = "Purchase";

data[1] = new Data();
data[1].id = 2;
data[1].name = "Mickey";
data[1].dept = "Sales";

data[2] = new Data();
data[2].id = 3;
data[2].name = "Donald";
data[2].dept = "Planning";

string jsonStr = JsonSerializer.Serialize(data);
Console.WriteLine(jsonStr);
writeFile("utf-8", "jsonStrArray.json", jsonStr);

}

static void readJson()
{

string jsonStr = ReadAllLine("jsonStr.json", "utf-8");
Console.WriteLine(jsonStr);

Data jsonData = new Data();
jsonData = JsonSerializer.Deserialize<Data>(jsonStr);

Console.WriteLine($"jsonData.id = {jsonData.id}");
Console.WriteLine($"jsonData.name = {jsonData.name}");
Console.WriteLine($"jsonData.dept = {jsonData.dept}");

}



static void readJsonArray()
{

string jsonStr = ReadAllLine("jsonStrArray.json", "utf-8");
Console.WriteLine(jsonStr);

Data[] jsonData = new Data[3];
jsonData = JsonSerializer.Deserialize<Data[]>(jsonStr);

foreach(Data item in jsonData)
{
Console.WriteLine($"jsonData.id = {item.id}");
Console.WriteLine($"jsonData.name = {item.name}");
Console.WriteLine($"jsonData.dept = {item.dept}");
}

}





public static void writeFile(string encodingName, string filePath, string writeText)
{

Encoding encoding = Encoding.GetEncoding(encodingName);
StreamWriter writer = new StreamWriter(filePath, false, encoding);
writer.WriteLine(writeText);

writer.Close();

}

public static string ReadAllLine(string filePath, string encodingName)
{
StreamReader sr = new StreamReader(filePath, Encoding.GetEncoding(encodingName));
string allLine = sr.ReadToEnd();
sr.Close();

return allLine;
}


}
}

ExecNote.app リリースしました!

ExecNoteは、コードが実行できるMarkdownアプリケーションです。Markdownドキュメント内に記載したコードをクリックすると実行ができます。わざわざターミナルを 起動させる必要がありません!無料ですのでもしよければダウンロードをお願いします。

About Me

11年目のシステムエンジニアです。アプリで生活や仕事を改善したい🐱仕事効率化、自動化のアプリ開発が得意です、ご相談ください。 🚀エンタメ系アプリの開発も模索中🐬社内SEや個人アプリ開発者、システムエンジニアになりたい人と繋がりたい🐱