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
Employee
solution Artist
を継承すると呼ばれるカスタムクラスを作成します。
クラスは、JSONデータからのバックシーケンシャル化の値を推測する値のタイプの場合に使用されるカスタムコンバーターです。
PersonConverter
JsonConverter
JsonCreationConverter<Person>
JsonCreationConverter<T>
カスタム
では、<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
JObject
Create
JsonSerializer.Populate
を達成することにより、json.netで多型誘導体を処理できます。このガイドで提供されているは、JSONデータを分析し、適切な導出型を決定する方法を示しています。この方法は、ディープティン中に多型を柔軟に処理できます。
以上が多型の敏aserializationのためにjson.netにカスタムJSonConverterを実装する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。