ホームページ > バックエンド開発 > C++ > 型情報なしでjson.netで多型jsonの脱介入を実行するにはどうすればよいですか?

型情報なしでjson.netで多型jsonの脱介入を実行するにはどうすればよいですか?

Barbara Streisand
リリース: 2025-02-02 12:01:11
オリジナル
409 人が閲覧しました

How Can I Perform Polymorphic JSON Deserialization in Json.NET Without Type Information?

json.net情報の種類のないタイプ情報なし。

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>
ログイン後にコピー
このように、カスタムJSonConverrterを使用すると、明示的なタイプ情報なしでPolymorphic JSONバックシリアル化を処理できるため、さまざまなデータソースとシームレスにコラボレーションできます。

以上が型情報なしでjson.netで多型jsonの脱介入を実行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート