首页 >后端开发 >C++ >如何在没有类型信息的情况下在JSON.NET中进行多态性JSON进行挑选?

如何在没有类型信息的情况下在JSON.NET中进行多态性JSON进行挑选?

Mary-Kate Olsen
Mary-Kate Olsen原创
2025-02-02 11:51:09360浏览

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn