問題タブ [system.text.json]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
4 に答える
8748 参照

c# - System.Text.Json API 呼び出しからネストされたオブジェクトを逆シリアル化する - データは親 JSON プロパティにラップされます

data次のようなプロパティで データ コンテンツをラップする API JSON 応答があります。

RequestSharpそのため、 のようなライブラリを使用してユーザー オブジェクトをリクエストすると、ユーザーresponse.ContentのコンテンツがdataAPI から取得された json プロパティにラップされます。コード:

これは問題ありませんが、次のように JSON を Object にデシリアライズしようとSystem.Text.Jsonすると、オブジェクトが作成されますが、User属性は割り当てられません。 .. いいえfirst_namelast_name['data']['first_name']

ラッパーJsonSerializer.Deserializeを無視するにはどうすればよいですか? data他の API 呼び出しでは、transactionまたはなどのオブジェクトの名前である可能性がuserあります。いずれにしても、データをラップします。

その他の注意事項:

最新の .Net Core 3.1 をターゲットにしており、Newtonsoft Json.Net から移行しています


私のユーザーオブジェクト:


解決後の更新:

以下のu / Nikunj Kakadiyaからの回答を、うまくいくものとして選択し、最終的に行ったことに最も似ていました.

data次のように処理するための汎用テンプレート ベースのコンテナー クラスを作成しました。

次に、そのコンテナー クラスを使用して、次のように、API 呼び出しから返された json コンテンツをラップします。

さらに、u/Pavel Anikhouski が指摘したように、クラスのシリアル化によってエラーが発生し、フィールドUser用のカスタム コンバーターを作成する必要がありました。クラスでは文字列ですがid、API はidを整数として返します。Userこれは私が遭遇したエラーで、最初は混乱しましたが、すぐに理解できました。ERROR: The JSON value could not be converted to System.String. Path: $.data.id | LineNumber: 0 | BytePositionInLine: 77.

カスタムコンバーターは次のIntToStringConverterとおりです。

User次に、顧客コンバーターを使用するようにクラスを変更しました。