Json.net を使用して派生型をシリアル化および逆シリアル化する
Json.net (Newtonsoft) では、C# でポリモーフィック継承を使用する場合、派生型を適切にシリアル化および逆シリアル化するために特別な処理が必要です。この記事では、型名の処理を有効にしてこれを行う方法について説明します。
質問
次のクラス階層を考えてみましょう:
<code class="language-csharp">public class Base { public string Name; } public class Derived : Base { public string Something; }</code>
ここで、Base オブジェクトのリストを含む JSON 文字列を逆シリアル化しようとしても、実際には Derived オブジェクトが含まれている場合、派生型情報を回復することはできません。この問題を解決するにはどうすればよいでしょうか?
答え
Json.net は、型名のシリアル化と逆シリアル化を可能にする TypeNameHandling オプションを提供します。この機能を使用するには:
これは例です:
<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>
このアプローチにより、Json.net はシリアル化中に型情報を保持し、逆シリアル化中にそれを復元するため、派生型を正しく復元できるようになります。
以上がC# で Json.net を使用して派生型をシリアル化および逆シリアル化する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。