タイプ情報なしで循環化された多型クラス(オブジェクトは異なるサブクラスに属することができます)が困難な場合があります。この記事では、このシーンのインスタンス化されたオブジェクトを処理するためにカスタムJSonConverrerを使用して、その実装とアプリケーションを実証するソリューションを提供します。
カスタマイズされたjsonconverr多型に対処するために、JSonConverterベースクラスから継承されたカスタムJSonConverrerを作成できます。このコンバーターは、特定の属性の存在に応じてオブジェクトの作成を処理します。 次のクラスレベル構造を検討してください:
<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; } }</code>GalleryItemConverter Procession ObjectインスタンスとDeepertine Process:
サンプルプログラムでの使用使用次の手順では、GalleryItemConverterの使用法が示されています。
プログラム出力は、「is_album」属性に従ってこれら2つのカテゴリに正常に分割されます。
<code class="language-csharp">public class GalleryItemConverter : JsonConverter { public override bool CanConvert(Type objectType) { return typeof(GalleryItem).IsAssignableFrom(objectType); } public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { JObject jo = JObject.Load(reader); // 如果 "is_album" 属性不存在,使用可空布尔值 bool? isAlbum = (bool?)jo["is_album"]; GalleryItem item; if (isAlbum.GetValueOrDefault()) { item = new GalleryAlbum(); } else { item = new GalleryImage(); } serializer.Populate(jo.CreateReader(), item); return item; } }</code>
この復活した応答は、元の画像を維持し、コンテンツを言い換えると、より多くの説明言語を使用します。
以上が明示的なタイプ情報なしでjson.netの多型JSONオブジェクトを脱力する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。