回答編集履歴

2

追記

2022/12/14 06:07

投稿

退会済みユーザー
test CHANGED
@@ -1,3 +1,88 @@
1
+ **【訂正&追記】**
2
+
3
+ 下に「多次元配列は JSON 文字列にシリアライズできない」と書きましたが、それは System.Text.Json 名前空間のシリアライザ/デシリアライザの場合で Newtonsoft.Json のシリアライザ/デシリアライザは多次元配列にも対応していました。(TN8001 さんのコメントの通り)
4
+
5
+ Newtonsoft.Json を NuGet からインストールして以下のようにして使えます。
6
+
7
+ ```C#
8
+ using System;
9
+ using System.Windows.Forms;
10
+ using Newtonsoft.Json;
11
+
12
+ namespace WindowsFormsApp1
13
+ {
14
+ public partial class Form15 : Form
15
+ {
16
+ private string[,,] multidimensionalArray; // 多次元配列
17
+ private string[][][] jaggedArray; // ジャグ配列
18
+ private string json1;
19
+ private string json2;
20
+
21
+ public Form15()
22
+ {
23
+ InitializeComponent();
24
+ }
25
+
26
+ // Load イベントで配列の初期化
27
+ private void Form15_Load(object sender, EventArgs e)
28
+ {
29
+ this.multidimensionalArray = new string[30, 12, 31];
30
+ for (int i = 0; i < 30; i++)
31
+ {
32
+ for (int j = 0; j < 12; j++)
33
+ {
34
+ for (int k = 0; k < 31; k++)
35
+ {
36
+ this.multidimensionalArray[i, j, k] =
37
+ $"elem-{i}-{j}-{k}";
38
+ }
39
+ }
40
+ }
41
+
42
+ this.jaggedArray = new string[30][][];
43
+ for (int i = 0; i < 30; i++)
44
+ {
45
+ this.jaggedArray[i] = new string[12][];
46
+ for (int j = 0; j < 12; j++)
47
+ {
48
+ this.jaggedArray[i][j] = new string[31];
49
+ for (int k = 0; k < 31; k++)
50
+ {
51
+ this.jaggedArray[i][j][k] =
52
+ $"elem-{i}-{j}-{k}";
53
+ }
54
+ }
55
+ }
56
+ }
57
+
58
+ // Newtonsoft.Json でシリアライズ
59
+ private void Serialize_Click(object sender, EventArgs e)
60
+ {
61
+ // 多次元配列を JSON 文字列にシリアライズ
62
+ this.json1 = JsonConvert.SerializeObject(this.multidimensionalArray);
63
+
64
+ // ジャグ配列を JSON 文字列にシリアライズ
65
+ this.json2 = JsonConvert.SerializeObject(this.jaggedArray);
66
+
67
+ // comp は true になる
68
+ bool comp = this.json1 == this.json2;
69
+ }
70
+
71
+ // Newtonsoft.Json でデシリアライズ
72
+ private void Deserialize_Click(object sender, EventArgs e)
73
+ {
74
+ // JSON 文字列を多次元配列にデシリアライズ
75
+ var array1 = JsonConvert.DeserializeObject<string[,,]>(this.json1);
76
+
77
+ // JSON 文字列をジャグ配列にデシリアライズ
78
+ var array2 = JsonConvert.DeserializeObject<string[][][]>(this.json2);
79
+ }
80
+ }
81
+ }
82
+ ```
83
+
84
+ ---
85
+
1
86
  配列を JSON 文字列にシリアライズしてファイルに保存し、使うときはファイルから JSON 文字列を取得して元の配列にデシリアライズして使うようにしてはいかがですか?
2
87
 
3
88
  ただし、多次元配列は JSON 文字列にシリアライズできないので、ジャグ配列を使ってください。

1

訂正

2022/12/14 03:25

投稿

退会済みユーザー
test CHANGED
@@ -1,6 +1,6 @@
1
1
  配列を JSON 文字列にシリアライズしてファイルに保存し、使うときはファイルから JSON 文字列を取得して元の配列にデシリアライズして使うようにしてはいかがですか?
2
2
 
3
- ただし、多次元配列は JSON 文字列にシリアライズできないので、ジャグ配列を使ってください。
3
+ ただし、多次元配列は JSON 文字列にシリアライズできないので、ジャグ配列を使ってください。
4
4
 
5
5
  ジャグ配列 (C# プログラミング ガイド)
6
6
  https://learn.microsoft.com/ja-jp/dotnet/csharp/programming-guide/arrays/jagged-arrays