JSON.NETを使用してREST APIから応答を逆シリアル化しようとしています。JsonConvert.DeserializeObjectがnull動的オブジェクトを生成します
dynamic resultObject = JsonConvert.DeserializeObject(responseText);
私はそれが頻繁に変更されるように、応答の異なる種類のREST APIの戻りのためのクラスを定義する必要はありませんしたいと思います。私はdynamic
ランタイム変数を利用したいと思います。
VS2015では、上記のコード行が実行された直後の値を確認するためにウォッチャーを追加しました。
resultObject
はnullになりますが、ウォッチャーでは、実行されたラインコードが直接的にNewtonsoft.Json.Linq.JObject
になり、デシリアライズされた応答文字列が設定されていることがわかります。
なぜ動的変数resultObject
にはJObject
が設定されていませんか?
var responseStream = e.Response?.GetResponseStream();
string responseText = "";
if (responseStream != null)
{
using (var reader = new StreamReader(responseStream))
{
responseText = reader.ReadToEnd();
}
dynamic responseObject = JsonConvert.DeserializeObject(responseText);
foreach (var error in responseObject["errors"].Children())
{
errors.Add(error.Val);
}
}
UPDATE:解析するJSONの
内容:デバッグ情報を削除するように更新
JSON - 問題が解決しません。
https://jsonblob.com/57cb00c7e4b0dc55a4f2abe9
UPDATE 2:
JsonConvert.DeserializeObject()
は、オブジェクト全体の周りに余分な括弧を持っている私のJSONを解析していることが表示されます。
それが応答ストリームから生成される文字列:JsonConvert.DeserializeObjectの
"{\"message\":\"422 Unprocessable Entity\",\"errors\":[[\"The email must be a valid email address.\"],[\"The password must be at least 8 characters.\"]],\"status_code\":422}"
値():
{{ "message": "422 Unprocessable Entity", "errors": [ [ "The email must be a valid email address." ], [ "The password must be at least 8 characters." ] ], "status_code": 422 }}
UPDATE 3: が生じJObject.Parse
への変換同じ出力です。
変数をタイプdynamic
からJObject
に変更しました - JObject.Parse()
からの応答を受け入れるために、変数はnullに設定されています。
レスポンスのテキストは何ですか?単純なjsonオブジェクトでは、動的オブジェクトのプロパティをうまく取得できます。 – Evk
@エヴァーク質問に内容を追加しました。要求にはかなりの不必要なデバッグ情報があります。私はそれを削除し、それが動作するかどうかを確認します。 –
@dbcスクリーンショットを削除し、最小限の完全なコードサンプルを提供するように更新されました。 –