JSONデータに異なるタイプのオブジェクトが含まれており、明示的なタイプ情報がない場合、json.netのバックシリアル化は課題に直面します。この障害を克服するために、カスタムJSONConverterを開発することができ、特定の属性に応じて対応するクラスを即座にインスタンス化できます。
Imgur API呼び出しがリストを返す例を考えてみましょう。 $タイプの属性がないため、自動化にjson.netを使用することは不可能です。ただし、IS_ALBUMプロパティを使用することにより、これら2つのカテゴリを区別できます。
カスタムJSonConverterを実現するには、以下に示すようにクラスを定義し、GalleryItemConverterを作成します。
コンバーターのReadJSONメソッドでは、IS_ALBUMプロパティをチェックして、インスタンス化するオブジェクトのタイプを決定します。次に、Serializerを使用してJSONデータをオブジェクトに入力します。
<code class="language-csharp">public abstract class GalleryItem { public string id { get; set; } public string title { get; set; } public string link { get; set; } public bool is_album { get; set; } } public class GalleryImage : GalleryItem { // ... } public class GalleryAlbum : GalleryItem { public int images_count { get; set; } public List<GalleryImage> images { get; set; } } public class GalleryItemConverter : JsonConverter { // ... }</code>これは、このコンバーターの使用を示す例プログラムです。
出力は、GalleryAlbumオブジェクトの画像を含む、ディープラート化のオブジェクトとそれぞれの属性を表示しました。カスタムGalleryItemConverterは、さまざまなデータ構造を効果的に処理するための明示的なタイプ情報なしでシリアル化できるソリューションを提供します。
以上がタイプ情報なしでjson.netで多型JSONを脱色する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。