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

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

Linda Hamilton
リリース: 2025-01-08 06:17:42
オリジナル
932 人が閲覧しました

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 までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート