ホームページ > バックエンド開発 > C++ > 多型の敏aserializationのためにjson.netにカスタムJSonConverterを実装する方法は?

多型の敏aserializationのためにjson.netにカスタムJSonConverterを実装する方法は?

Susan Sarandon
リリース: 2025-02-02 08:36:11
オリジナル
924 人が閲覧しました

How to Implement a Custom JsonConverter in JSON.NET for Polymorphic Deserialization?

json.netは、jsonconverterをカスタマイズして多型誘導体化を処理します

json.netで多型タイプを扱う場合、jsonでタイプが明確に定義されていない場合、JSONデータバックバックボーンタイプオブジェクトは困難な場合があります。このガイドは、この障害を克服するためにカスタムJSonConverrerを達成する方法を示しています。

チャレンジ

次のJSONデータを検討してください:

タスクは、このJSONデータを

に返すことです。ここで、
<code class="language-json">[
  {
    "Department": "Department1",
    "JobTitle": "JobTitle1",
    "FirstName": "FirstName1",
    "LastName": "LastName1"
  },
  {
    "Department": "Department2",
    "JobTitle": "JobTitle2",
    "FirstName": "FirstName2",
    "LastName": "LastName2"
  },
  {
    "Skill": "Painter",
    "FirstName": "FirstName3",
    "LastName": "LastName3"
  }
]</code>
ログイン後にコピー
は基本クラスであり、

およびList<Person>は派生クラスです。 Person Employeesolution Artist

この状況に対処するために、

を継承すると呼ばれるカスタムクラスを作成します。

クラスは、JSONデータからのバックシーケンシャル化の値を推測する値のタイプの場合に使用されるカスタムコンバーターです。

PersonConverter PersonConverter実装JsonConverterJsonCreationConverter<Person> JsonCreationConverter<T>

readjsonメソッドの書き換え

カスタム

では、
<code class="language-csharp">public class PersonConverter : JsonCreationConverter<Person>
{
    protected override Person Create(Type objectType, JObject jObject)
    {
        if (FieldExists("Skill", jObject))
        {
            return new Artist();
        }
        else if (FieldExists("Department", jObject))
        {
            return new Employee();
        }
        else
        {
            return new Person();
        }
    }

    private bool FieldExists(string fieldName, JObject jObject)
    {
        return jObject[fieldName] != null;
    }
}</code>
ログイン後にコピー
メソッドが書き換えられて、次の手順を実行します。

jsonデータをに読んでください。

PersonConverterメソッドを呼び出して、JSON属性に従ってタイプを決定します。 ReadJson

メソッドを使用して、オブジェクトの属性を入力します。
  1. 新しく作成されたオブジェクトに戻ります。 JObject
  2. コンバーターCreate
  3. を使用します
  4. カスタムコンバーターを使用するには、次のコードを使用できます。 JsonSerializer.Populate
  5. 結論
カスタム

を達成することにより、json.netで多型誘導体を処理できます。このガイドで提供されているは、JSONデータを分析し、適切な導出型を決定する方法を示しています。この方法は、ディープティン中に多型を柔軟に処理できます。

以上が多型の敏aserializationのためにjson.netにカスタムJSonConverterを実装する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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