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

質問編集履歴

2

質問への追記1

2021/02/04 03:56

投稿

Leizi
Leizi

スコア8

title CHANGED
File without changes
body CHANGED
@@ -15,7 +15,68 @@
15
15
 
16
16
  ![イメージ説明](b7fd5db601c7a8894163e0b05f8aaf49.png)
17
17
 
18
+ ### 追記1
19
+ > JSON 文字列のサンプルを書いて、それのどこで悩んでいるのか具体的に書いてもらえませんか? 今の質問内容ではそのあたりが分からないです。
18
20
 
21
+ jsonを送られてくる可能性として、配列の場合とそうでない場合があります
22
+ ```json
23
+ {
24
+ "LoginList": {
25
+ "LoginItem": [
26
+ {
27
+ "ID": "TEST01"
28
+ },
29
+ {
30
+ "ID": "TEST02"
31
+ }
32
+ ]
33
+ }
34
+ }
35
+ ```
36
+
37
+ ```json
38
+ {
39
+ "LoginList": {
40
+ "LoginItem": {
41
+ "ID": "TEST01"
42
+ }
43
+ }
44
+ }
45
+ ```
46
+ visual studioの機能でjsonからクラスを作成
47
+ ```C#
48
+ public class Rootobject
49
+ {
50
+ public Loginlist LoginList { get; set; }
51
+ }
52
+
53
+ public class Loginlist
54
+ {
55
+ public Loginitem LoginItem { get; set; }
56
+ }
57
+
58
+ public class Loginitem
59
+ {
60
+ public string ID { get; set; }
61
+ }
62
+ ```
63
+
64
+ しかしこのままだと配列ではない場合はデシリアライズが成功しますが、配列だとExceptionになります
65
+ 逆に```public List<Loginitem> LoginItem { get; set; }```にすると配列でない場合にExceptionになります
66
+
67
+ なのでそれを避けるために上記で記載したとおり```public object LoginItem { get; set; }```にするという記事を見つけました
68
+ ですが、obejctだとそのまま使用できないのでキャストが必要となるらしいのですが、
69
+ ![イメージ説明](db1b9bbcfa41a8dd0c223979a220a88e.png)
70
+
71
+ 配列ではないのならば下記のように持ち
72
+ ![イメージ説明](7b856b9236df1bebe8b8e108e9a9396d.png)
73
+
74
+ 配列なら下記のように持つことが出来ないのか
75
+ ![イメージ説明](b55ae3e8e6e6c2bb347ded2062b4da0d.png)
76
+
77
+ 上記のようにクラス自体はどうにもならないのであれば、LoginItem の中身を使用する際に都度キャストが必要なのかという内容です。
78
+
79
+
19
80
  ### 補足情報(FW/ツールのバージョンなど)
20
81
  Visual Studio2019
21
82
  .Net Core 3.1

1

タイトル修正

2021/02/04 03:56

投稿

Leizi
Leizi

スコア8

title CHANGED
@@ -1,1 +1,1 @@
1
- 【C#】JSONのデシアライズで、配列の場合とそうでない場合の際の対処法が知りたい
1
+ 【C#】JSONのデシアライズで、配列の場合とそうでない場合の際の対処法が知りたい
body CHANGED
File without changes