ホームページ >バックエンド開発 >C++ >Newtonsoft.Json.NET を使用して JSON を IEnumerable に逆シリアル化する方法は?

Newtonsoft.Json.NET を使用して JSON を IEnumerable に逆シリアル化する方法は?

Patricia Arquette
Patricia Arquetteオリジナル
2025-01-17 13:41:10556ブラウズ

How to Deserialize JSON into an IEnumerable using Newtonsoft.Json.NET?

Newtonsoft.Json.NET を使用して JSON を IEnumerable コレクションに逆シリアル化する

チャレンジ:

複雑な JSON データを IEnumerable<BaseType> にデシリアライズすることは困難を伴います (BaseType は抽象です)。 標準 JsonConvert.DeserializeObject() は、抽象基本型が原因で失敗します。

解決策:

この解決策には、JsonSerializerSettings とその TypeNameHandling プロパティを活用することが含まれます。 TypeNameHandlingAll に設定すると、シリアル化された JSON に $type フィールドが含まれるようになり、逆シリアル化に重要な型情報が保持されます。

実装手順:

  1. シリアル化の構成: JsonSerializerSettings オブジェクトを作成し、TypeNameHandlingAll に設定します。
<code class="language-csharp">JsonSerializerSettings settings = new JsonSerializerSettings
{
    TypeNameHandling = TypeNameHandling.All
};</code>
  1. 型情報を使用してシリアル化: 構成された設定を使用してオブジェクトをシリアル化します。 これにより、必要な $type フィールドが JSON 文字列に追加されます。
<code class="language-csharp">string strJson = JsonConvert.SerializeObject(instance, settings);</code>

結果の JSON は次のようになります ($type フィールドに注意してください):

<code class="language-json">{
  "$type": "System.Collections.Generic.List`1[[MyAssembly.BaseClass, MyAssembly]], mscorlib",
  "$values": [
    {
      "$id": "1",
      "$type": "MyAssembly.ClassA, MyAssembly",
      "Email": "[email'\u00a0protected]"
    },
    {
      "$id": "2",
      "$type": "MyAssembly.ClassB, MyAssembly",
      "Email": "[email'\u00a0protected]"
    }
  ]
}</code>
  1. 型情報を使用した逆シリアル化: 同じ IEnumerable<BaseType> オブジェクトを使用して、JSON 文字列を settings に逆シリアル化します。
<code class="language-csharp">IEnumerable<BaseType> deserialized = JsonConvert.DeserializeObject<IEnumerable<BaseType>>(strJson, settings);</code>

関連ドキュメント:

以上がNewtonsoft.Json.NET を使用して JSON を IEnumerable に逆シリアル化する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。