ホームページ > バックエンド開発 > C++ > 同じプロパティに対して一貫性のない配列と単一オブジェクト構造を持つ JSON を逆シリアル化するにはどうすればよいですか?

同じプロパティに対して一貫性のない配列と単一オブジェクト構造を持つ JSON を逆シリアル化するにはどうすればよいですか?

DDD
リリース: 2025-01-12 19:11:43
オリジナル
977 人が閲覧しました

How Can I Deserialize JSON with Inconsistent Array and Single Object Structures for the Same Property?

JSON データ内の混合コレクションと単一オブジェクトの処理

従来の逆シリアル化手法では、同じプロパティの配列と単一のオブジェクトを含む JSON データを逆シリアル化するときに問題が発生する可能性があります。この記事では、Facebook から返される JSON 応答がメディア データをオブジェクトとして、または配列として表す特定のシナリオについて説明します。

この問題を解決するには、カスタム JSON コンバーターを使用できます。このコンバータは、JSON.NET のデフォルトの逆シリアル化プロセスとターゲット クラスの間の仲介者として機能します。この場合、ターゲット クラスは FacebookAttachment で、これには Media という List プロパティが含まれます。

カスタム コンバータ FacebookMediaJsonConverter は、一貫性のないデータ形式を処理するために ReadJson メソッドをオーバーライドします。具体的には、JsonReader.TokenType をチェックし、それに応じて逆シリアル化を実行します。

<code>public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
  if (reader.TokenType == JsonToken.StartArray)
    return serializer.Deserialize<List<facebookmedia>>(reader);
  else
    return null;
}</code>
ログイン後にコピー
配列が見つかった場合、コンバーターは逆シリアル化された配列を返します。ただし、単一のオブジェクトが見つかった場合は、null が返されます。これは、ターゲット プロパティ Media がリストを予期しているためです。

このコンバーターを使用すると、逆シリアル化プロセスは、JSON 応答内の一貫性のない形式に適応できます。ただし、この方法は JSON 構造で起こり得るすべての変更を考慮しているわけではなく、すべてのシナリオに適しているわけではないことに注意してください。

以上が同じプロパティに対して一貫性のない配列と単一オブジェクト構造を持つ JSON を逆シリアル化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート