首頁 > 後端開發 > C++ > 如何在沒有類型信息的情況下在JSON.NET中進行多態性JSON進行挑選?

如何在沒有類型信息的情況下在JSON.NET中進行多態性JSON進行挑選?

Mary-Kate Olsen
發布: 2025-02-02 11:51:09
原創
312 人瀏覽過

How to Deserialize Polymorphic JSON in Json.NET without Type Information?

無需類型信息,使用Json.NET反序列化多態JSON類

當JSON數據包含不同類別的對象且沒有顯式類型信息時,Json.NET的反序列化會面臨挑戰。為了克服這個障礙,可以開發一個自定義的JsonConverter,根據特定的屬性實例化相應的類。

讓我們考慮一個例子,其中Imgur API調用返回一個列表,該列表包含JSON中表示的GalleryImage和GalleryAlbum類。由於缺少$type屬性,使用Json.NET進行自動化反序列化是不可行的。但是,通過利用is_album屬性,我們可以區分這兩個類。

要實現自定義JsonConverter,我們定義我們的類並創建一個GalleryItemConverter,如下所示:

<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>
登入後複製

在轉換器的ReadJson方法中,我們檢查is_album屬性以確定要實例化的對像類型。然後使用序列化器將JSON數據填充到對像中。

這是一個演示此轉換器用法的示例程序:

<code class="language-csharp">List<GalleryItem> items = JsonConvert.DeserializeObject<List<GalleryItem>>(json, new GalleryItemConverter());</code>
登入後複製

輸出顯示反序列化的對象及其各自的屬性,包括GalleryAlbum對象的圖像。自定義的GalleryItemConverter提供了一種無需顯式類型信息即可反序列化多態JSON類的解決方案,從而能夠有效處理各種數據結構。

以上是如何在沒有類型信息的情況下在JSON.NET中進行多態性JSON進行挑選?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板