ホームページ > バックエンド開発 > C++ > json.netでカスタムjsonConverterを作成して、TypeNameHandlingなしで多型シリアル化を処理する方法は?

json.netでカスタムjsonConverterを作成して、TypeNameHandlingなしで多型シリアル化を処理する方法は?

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

How to Create a Custom JsonConverter in JSON.NET to Handle Polymorphic Serialization without TypeNameHandling?

json.netでカスタマイズされたjsonconverrter

を実装します

カスタムJSonConverterは、json.netシリアル化と依存化関数を拡張するために使用されます。場合によっては、複雑なデータ型またはカスタマイズされたデータ型を処理するために、カスタムコンバーターを作成する必要があります。

基本クラスの人と2人の派生した従業員とアーティストがいる例を考えてみましょう。 JSONとしてシリアル化する必要がある人物のリストがあります。ただし、TypeNameHandlingの使用を避けたいと思います。これは、カスタムJSonConverterが役割を果たすことができる場所です。

このため、JSONCREATIONVERTER

を拡張するカスタムコンバーターパーソンコンバーターを定義する必要があります。コンバーターの作成方法では、JSONオブジェクトを分析して、特定のフィールドの存在に応じて正しい派生型を決定できます。

さて、JSONのバックフローがリストに戻ってシリアル化されている場合、
<code class="language-c#">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>
ログイン後にコピー
オブジェクト、カスタムコンバーターを使用できます:

順次化中にカスタムコンバーターを使用する場合、PersonConverterのインスタンスはjsonConvert.deserializeObjectに渡す必要があることを忘れないでください。この方法により、カスタムJSonConverrerで特別な変換ロジックを提供することにより、複雑なデータ型またはカスタマイズされたデータ型を処理できます。
<code class="language-c#">string json = "[...]";
List<Person> persons = JsonConvert.DeserializeObject<List<Person>>(json, new PersonConverter());</code>
ログイン後にコピー

以上がjson.netでカスタムjsonConverterを作成して、TypeNameHandlingなしで多型シリアル化を処理する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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