ホームページ >バックエンド開発 >C++ >明示的なタイプ情報なしでjson.netの多型JSONオブジェクトを脱力する方法は?

明示的なタイプ情報なしでjson.netの多型JSONオブジェクトを脱力する方法は?

Patricia Arquette
Patricia Arquetteオリジナル
2025-02-02 12:06:12887ブラウズ

How to Deserialize Polymorphic JSON Objects in Json.NET Without Explicit Type Information?

見かけのタイプ情報である必要はありません。JSON.NETバック - シーケンス化された多型JSONクラスを使用

タイプ情報なしで循環化された多型クラス(オブジェクトは異なるサブクラスに属することができます)が困難な場合があります。この記事では、このシーンのインスタンス化されたオブジェクトを処理するためにカスタムJSonConverrerを使用して、その実装とアプリケーションを実証するソリューションを提供します。

カスタマイズされたjsonconverr

多型に対処するために、JSonConverterベースクラスから継承されたカスタムJSonConverrerを作成できます。このコンバーターは、特定の属性の存在に応じてオブジェクトの作成を処理します。 次のクラスレベル構造を検討してください:

jsonConverterは

を実装しています
<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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。