Json.net を使用した派生型の逆シリアル化
基底クラス Base
と派生クラス Derived
があり、Derived
は Base
を継承しているとします。 Base
オブジェクトのリストがあり、これには Base
と Derived
のインスタンスが含まれています。このリストの JSON 表現を逆シリアル化するときは、派生型を Base
オブジェクトとしてだけでなく、実際の型として取得する必要があります。
これを実現するために、Json.net は 型名の処理 と呼ばれる機能を提供します。この機能を有効にし、設定パラメーターとしてシリアル化および逆シリアル化操作に渡すことにより、シリアル化された JSON に含めるオブジェクト タイプを指定できます。
<code class="language-csharp">Base object1 = new Base() { Name = "Object1" }; Derived object2 = new Derived() { Something = "Some other thing" }; List<Base> inheritanceList = new List<Base>() { object1, object2 }; JsonSerializerSettings settings = new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.All }; string Serialized = JsonConvert.SerializeObject(inheritanceList, settings); List<Base> deserializedList = JsonConvert.DeserializeObject<List<Base>>(Serialized, settings);</code>
が逆シリアル化されると、deserializedList
には正しいタイプの Base
および Derived
オブジェクトが含まれるようになります。ただし、型名の処理を有効にすると欠点があり、シリアル化された JSON にすべてのオブジェクトとリストの名前が含まれるため、場合によっては理想的ではない可能性があります。
以上がJson.net を使用して基本型と派生型のリストを逆シリアル化し、実際の型を保持するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。