回答編集履歴

2

追記

2022/08/15 06:30

投稿

退会済みユーザー
test CHANGED
@@ -13,3 +13,73 @@
13
13
 
14
14
  上記ではダメで、デシリアライズしてから調べるとかの話であれば、JSON として正しい文字列のサンプルを書いてください。
15
15
 
16
+ ---
17
+
18
+ **【追記】**
19
+
20
+ 上の質問のコメント欄の 2022/08/15 15:07 の私のコメントで、
21
+
22
+ > {"note":[{"beat":[24,0,4],"block":1},
23
+ > {"beat":[103,0,2],"endbeat":[104,0,2],"block":3},{"beat":[205,0,4],"block":4}]}
24
+
25
+ > 上記をベースに C# のクラス定義を作成し、そのオブジェクトにデシリアライズする方法を回答欄に追記しておきます。
26
+
27
+ ・・・と書いた件です。.NET Framework 4.8 のコンソールアプリを使って例を書きます。
28
+
29
+ まず、上の JSON 文字列をベースに、C# のオブジェクトのクラス定義を作成します。それには以下の記事に書いたように Visual Studio を利用できます。
30
+
31
+ JSON 文字列から C# のクラス定義生成
32
+ http://surferonwww.info/BlogEngine/post/2020/05/10/generate-class-definition-from-json-string.aspx
33
+
34
+ 上の記事に書いてあるようにして JSON 文字列から C# のクラス定義を作成すると以下の通りとなります。
35
+
36
+ ```
37
+ public class Rootobject
38
+ {
39
+ public Note[] note { get; set; }
40
+ }
41
+
42
+ public class Note
43
+ {
44
+ public int[] beat { get; set; }
45
+ public int block { get; set; }
46
+ public int[] endbeat { get; set; }
47
+ }
48
+ ```
49
+
50
+ .NET Framework での定番の Newtonsoft.Json と System.Text.Json を使って、上の JSON 文字列を Rootobject クラスのオブジェクトにデシリアライズしてみます。
51
+
52
+ ```
53
+ using Newtonsoft.Json;
54
+ using System;
55
+
56
+ namespace ConsoleAppJson
57
+ {
58
+ internal class Program
59
+ {
60
+ static void Main(string[] args)
61
+ {
62
+ var jsonString = @"{""note"":[
63
+ {""beat"":[24,0,4],""block"":1},
64
+ { ""beat"":[103,0,2],""endbeat"":[104,0,2],""block"":3},
65
+ { ""beat"":[205,0,4],""block"":4}
66
+ ]}";
67
+
68
+ // Newtonsoft.Json
69
+ var result1 = JsonConvert.DeserializeObject<Rootobject>(jsonString);
70
+
71
+ // System.Text.Json
72
+ var result2 = System.Text.Json.JsonSerializer.Deserialize<Rootobject>(jsonString);
73
+
74
+ Console.Read();
75
+ }
76
+ }
77
+ }
78
+ ```
79
+
80
+ 結果は以下のようになります。デバッガで途中で実行を止めて Newtonsoft.Json でのデシリアライズ結果 result1 の結果を見たものです。System.Text.Json のデシリアライズ結果 result2 も同じになります。JSON 文字列に "endbeat" が存在する場合はその内容が、存在しない場合は null になっているとことに注目してください。
81
+
82
+ ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2022-08-15/b0939475-62be-4eda-9459-88c5c2bf3041.jpeg)
83
+
84
+ Unity でよく使われているという JsonUtility でも同じ結果になると思います。
85
+

1

引用追加

2022/08/14 23:14

投稿

退会済みユーザー
test CHANGED
@@ -1,4 +1,6 @@
1
1
  質問のコメントで言った JSON として正しいかはちょっと置いといて・・・
2
+
3
+ > endbeatが含まれているのかを判断する方法はありますでしょうか?
2
4
 
3
5
  String.Contains メソッドを使ってはいかがですか? 具体的には以下の記事を見てください。
4
6