ホームページ > バックエンド開発 > C++ > C# で Json.net を使用して派生型をシリアル化および逆シリアル化する方法

C# で Json.net を使用して派生型をシリアル化および逆シリアル化する方法

Mary-Kate Olsen
リリース: 2025-01-21 18:41:08
オリジナル
658 人が閲覧しました

How to Serialize and Deserialize Derived Types in C# with Json.net?

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 オプションを提供します。この機能を使用するには:

  1. JsonSerializerSettings オブジェクトを作成し、TypeNameHandling を TypeNameHandling.All に設定します。
  2. この設定オブジェクトをパラメータとして SerializeObject メソッドと DeserializeObject メソッドに渡します。

これは例です:

<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 サイトの他の関連記事を参照してください。

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