ホームページ >バックエンド開発 >C++ >リスト型が配列以外の JSON データを予期している場合、JSON デシリアライゼーションが失敗するのはなぜですか?

リスト型が配列以外の JSON データを予期している場合、JSON デシリアライゼーションが失敗するのはなぜですか?

Linda Hamilton
Linda Hamiltonオリジナル
2025-01-08 06:17:42927ブラウズ

Why Does JSON Deserialization Fail When a List Type Expects Non-Array JSON Data?

JSON 逆シリアル化エラーの処理: リスト型および非配列 JSON データ

Newtonsoft の JsonConvert を使用して JSON データを逆シリアル化する場合、開発者はよく次のエラーに遭遇します。「タイプ A の JSON 配列には、タイプ 'System.Collections.Generic.List`1[T]' が必要であるため、現在の JSON オブジェクトを型 'System.Collections.Generic.List`1[T]' に逆シリアル化できません。正しく逆シリアル化します ”

このエラーは、ターゲット データ型がリスト (エラー メッセージでは「List`1」と表示) であるが、JSON データが配列ではない場合に発生します。この問題を解決するには、予想される配列形式と一致するように JSON データを変更するか、非配列形式を受け入れるようにターゲット データ型を調整する必要があります。

JSON データ変換

JSON データが実際には配列であるにもかかわらず、この形式で表現されていない場合は、逆シリアル化する前に配列形式に変換する必要があります。この目的には、JSON.NET の JObject クラスまたは JArray クラスを使用できます。たとえば、JSON データが次の形式である場合:

<code>{"data":[{"target_id":9503123,"target_type":"user"}]}</code>

次のコードを使用して配列形式に変換できます:

<code>JObject obj = JObject.Parse(jsonstring);
jsonstring = obj["data"].ToString();</code>

これにより、JSON データが次の配列形式に変換されます:

<code>[{"target_id":9503123,"target_type":"user"}]</code>

ターゲットのデータ型を調整します

JSON データが配列でない場合は、配列以外の形式を受け入れるようにターゲット データ型を調整する必要があります。この場合、List 型を RootObject 型に変更する必要があります。例:

<code>RootObject datalist = JsonConvert.DeserializeObject<RootObject>(jsonstring);</code>

以上がリスト型が配列以外の JSON データを予期している場合、JSON デシリアライゼーションが失敗するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。