問題タブ [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.
c# - System.Text.Json API 呼び出しからネストされたオブジェクトを逆シリアル化する - データは親 JSON プロパティにラップされます
data
次のようなプロパティで
データ コンテンツをラップする API JSON 応答があります。
RequestSharp
そのため、 のようなライブラリを使用してユーザー オブジェクトをリクエストすると、ユーザーresponse.Content
のコンテンツがdata
API から取得された json プロパティにラップされます。コード:
これは問題ありませんが、次のように JSON を Object にデシリアライズしようとSystem.Text.Json
すると、オブジェクトが作成されますが、User
属性は割り当てられません。 .. いいえfirst_name
last_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
次に、顧客コンバーターを使用するようにクラスを変更しました。