回答編集履歴

1

2022/02/02 12:12

投稿

退会済みユーザー
test CHANGED
@@ -1,3 +1,68 @@
1
+ 質問者さんはこのスレッドを放棄して去ってしまったようで、質問のコメントに対する返事がありませんが、たぶんやりたいことは (2) すなわち、
2
+
3
+ (2) クライアントから「概要」に書いてある JSON 文字列を送信し(であれば、GET ではなく POST とすべきだが)、ASP.NET Core Web アプリでそれを受けて C# のオブジェクトにデシリアライズして Controller のアクションメソッドの引数に渡したい。
4
+
5
+ ・・・だろうと想像して、質問のコメントに書いたように (2) なら GET でなく POST に直す、「概要」の JSON 文字列が正しくないので見直す、Model も正しくないので見直す、DataContractJsonSerializer など使わないのでそこも見直す、ということで回答を書いておきます。
6
+
7
+ JSON 文字列。質問のは JSON として正しくないので以下に修正:
8
+
9
+
10
+ ```
11
+ {
12
+ "Name": "太郎",
13
+ "Code": 32,
14
+ "SubjectScores": [{"Subject": "数学","Score": 87},{"Subject": "英語","Score": 90}]
15
+ }
16
+ ```
17
+
18
+ それをベースに C# のクラス定義を作成:
19
+
20
+ ```
21
+ public class Rootobject
22
+ {
23
+ public string Name { get; set; }
24
+ public int Code { get; set; }
25
+ public Subjectscore[] SubjectScores { get; set; }
26
+ }
27
+
28
+ public class Subjectscore
29
+ {
30
+ public string Subject { get; set; }
31
+ public int Score { get; set; }
32
+ }
33
+ ```
34
+
35
+ Visual Studio のツールを使って作成できます。詳しくは以下の記事を見てください。
36
+
37
+ JSON 文字列から C# のクラス定義生成
38
+ http://surferonwww.info/BlogEngine/post/2020/05/10/generate-class-definition-from-json-string.aspx
39
+
40
+ 上の JSON 文字列を受けるアクションメソッド。シリアライザはフレームワークに備わっており、自分で DataContractJsonSerializer などを使うコードを書く必要はありません。
41
+
42
+ ```
43
+ [HttpPost]
44
+ public IActionResult Recieve([FromBody]Rootobject personalInfo)
45
+ {
46
+ var name = personalInfo.Name;
47
+ var code = personalInfo.Code;
48
+ var subjectscores = personalInfo.SubjectScores;
49
+ var subject = subjectscores[0].Subject;
50
+ var score = subjectscores[0].Score;
51
+ return Ok("処理完了");
52
+ }
53
+ ```
54
+
55
+ ASP.NET Core MVC では引数に [FromBody] を付与するのは必須です。詳しくは以下の記事を見てください。
56
+
57
+ MVC に JSON をバインドするには [FromBody] が必要 (CORE)
58
+ http://surferonwww.info/BlogEngine/post/2021/04/12/frombodyattribute-is-required-for-model-binding-json-to-action-method-of-mvc.aspx
59
+
60
+ 以上でクライアントから正しく上の JSON 文字列を POST 送信すればアクションメソッドの引数にデシリアライズされた C# のオブジェクトを受け取ることができます。
61
+
62
+ クライアントに、例えば、Fiddler を使って以下のように送信できます。要求ヘッダに Content-Type: application/json を設定するのは必須ですので忘れないように。
63
+
1
64
  ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2022-02-02/cbbf3f43-cebe-410a-b045-07228711abb2.jpeg)
2
65
 
66
+ Visual Studio のデバッガを使って以下のように JSON 文字列をデシリアライズした結果がアクションメソッドの引数に代入されることは確認できます。
67
+
3
68
  ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2022-02-02/eae6dd26-9ee3-4ae4-b80c-1a842006a1d6.jpeg)