JSON.NETの強力な機能により、タイプ情報がなくても、Polymorphic JSONデータをバックすることができます。これは、さまざまなタイプのタイプのタイプのデータソースを処理する場合に特に役立ちます。たとえば、Imgur APIは、ギャラリーイメージとギャラリーアルバムの状況も返します。 これを達成するために、インスタンス化されたプロセスを処理するカスタムJSONConverterを作成しました。まず、GalleryItem Base Classとその派生クラスのGalleryImageとGalleryalbumを定義します。
次に、jsonConverter、GalleryItemConverter:を実現します
コンバーターは、インスタンス化するタイプを決定する「is_album」プロパティがあるかどうかをチェックします。次に、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; } }</code>
プログラムの出力は、ギャラリーの画像とギャラリーのアルバムオブジェクトの劣化が成功し、それぞれの属性が正確に埋められていることを示しています。
<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) { // 解析包含数据的JSON对象 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(); // 使用JsonSerializer填充对象的属性 serializer.Populate(jo.CreateReader(), item); return item; } // 对于我们的目的,不需要实现CanWrite和WriteJson }</code>
以上が型情報なしでjson.netで多型jsonの脱介入を実行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。