json.netでカスタマイズされたjsonconverrter
基本クラスの人と2人の派生した従業員とアーティストがいる例を考えてみましょう。 JSONとしてシリアル化する必要がある人物のリストがあります。ただし、TypeNameHandlingの使用を避けたいと思います。これは、カスタムJSonConverterが役割を果たすことができる場所です。
このため、JSONCREATIONVERTER
を拡張するカスタムコンバーターパーソンコンバーターを定義する必要があります。コンバーターの作成方法では、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>
<code class="language-c#">string json = "[...]"; List<Person> persons = JsonConvert.DeserializeObject<List<Person>>(json, new PersonConverter());</code>
以上がjson.netでカスタムjsonConverterを作成して、TypeNameHandlingなしで多型シリアル化を処理する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。