teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

3

追伸2を追加

2017/03/28 01:01

投稿

退会済みユーザー
answer CHANGED
@@ -23,4 +23,75 @@
23
23
  「JSON 文字列」⇒「C# のクラス定義」の変換サービスがあるので使ってみてください。
24
24
 
25
25
  json2csharp
26
- [http://json2csharp.com/](http://json2csharp.com/)
26
+ [http://json2csharp.com/](http://json2csharp.com/)
27
+
28
+
29
+ 【追伸2】
30
+
31
+ 「C# のクラス定義が違うのではないですか?」とか言っておいてハズレだったら何ですので、Json.NET を使って検証してみました。(MiniJSON というのは持ってないのでそれでどうやるかは分かりません)
32
+
33
+ Json.NET なら上に書いたクラス定義で逆シリアル化できることは確認できました。以下のコードを見てください。
34
+
35
+ ```
36
+ using System;
37
+ using System.Collections.Generic;
38
+ using System.Linq;
39
+ using System.Text;
40
+ using Newtonsoft.Json;
41
+
42
+ namespace JsonNETSample
43
+ {
44
+ class Program
45
+ {
46
+ static void Main(string[] args)
47
+ {
48
+ string json = @"{""player_data"":[
49
+ {""id"":1,""name"":""Bob"",""point"":42},
50
+ {""id"":2,""name"":""Mary"",""point"":26},
51
+ {""id"":3,""name"":""Mike"",""point"":63},
52
+ {""id"":4,""name"":""Sayaka"",""point"":53},
53
+ {""id"":5,""name"":""Json"",""point"":64}]}";
54
+
55
+ RootObject root = JsonConvert.DeserializeObject<RootObject>(json);
56
+
57
+ foreach (PlayerData player in root.player_data)
58
+ {
59
+ Console.WriteLine("id:{0}, name:{1}, point:{2}",
60
+ player.id, player.name, player.point);
61
+ }
62
+
63
+ /*
64
+ 結果は:
65
+ id:1, name:Bob, point:42
66
+ id:2, name:Mary, point:26
67
+ id:3, name:Mike, point:63
68
+ id:4, name:Sayaka, point:53
69
+ id:5, name:Json, point:64
70
+ */
71
+ }
72
+ }
73
+
74
+ public class RootObject
75
+ {
76
+ public List<PlayerData> player_data { get; set; }
77
+ }
78
+
79
+ public class PlayerData
80
+ {
81
+ public int id { get; set; }
82
+ public string name { get; set; }
83
+ public int point { get; set; }
84
+ }
85
+ }
86
+ ```
87
+ というわけで・・・
88
+
89
+ > 1.上のような仕様を満たすようなdecodeJsonクラス(途中までは下のソースコードに書いてあります)をどう書いていけば良いのでしょうか?(ヒント(?)が欲しいです
90
+
91
+ MiniJSON ではなく Json.NET を使った例ですが、上のコードを見てください。
92
+
93
+ > 2.下のソースコード内に登場するIList, IDictionaryとはList, Dictionaryとどのように違うのでしょうか?
94
+
95
+ IList, IDictionary など、頭に I がつくのはインターフェイスです。インターフェイスを継承したクラスはインターフェイスで定義されるメソッドを必ず実装するというルールになっています。
96
+
97
+ List<T>, Dictionary<TKey, TValue> はクラスです。それぞれ IList, IDictionary を継承しています。

2

追伸追加&リンク設定

2017/03/28 01:01

投稿

退会済みユーザー
answer CHANGED
@@ -23,4 +23,4 @@
23
23
  「JSON 文字列」⇒「C# のクラス定義」の変換サービスがあるので使ってみてください。
24
24
 
25
25
  json2csharp
26
- http://json2csharp.com/
26
+ [http://json2csharp.com/](http://json2csharp.com/)

1

追伸追加

2017/03/27 23:59

投稿

退会済みユーザー
answer CHANGED
@@ -16,4 +16,11 @@
16
16
  public string name { get; set; }
17
17
  public int point { get; set; }
18
18
  }
19
- ```
19
+ ```
20
+
21
+ 【追伸】
22
+
23
+ 「JSON 文字列」⇒「C# のクラス定義」の変換サービスがあるので使ってみてください。
24
+
25
+ json2csharp
26
+ http://json2csharp.com/