ホームページ > バックエンド開発 > C++ > JsonConvert.DeserializeObject を使用して JSON 配列を C# コレクションに逆シリアル化する方法

JsonConvert.DeserializeObject を使用して JSON 配列を C# コレクションに逆シリアル化する方法

Patricia Arquette
リリース: 2025-01-15 08:55:45
オリジナル
977 人が閲覧しました

How to Deserialize JSON Arrays into C# Collections Using JsonConvert.DeserializeObject?

JsonConvert.DeserializeObject を使用して JSON を C# POCO クラスに逆シリアル化します

JsonConvert.DeserializeObject は、JSON データを C# オブジェクトに変換するための強力なツールです。ただし、JSON をコレクションまたはネストされたオブジェクトを含む POCO (Plain Old CLR Object) クラスに逆シリアル化しようとすると、エラーが発生することがあります。

JsonConvert.DeserializeObject を使用するときに発生する一般的な問題は、JSON 配列を厳密に型指定されたコレクションに逆シリアル化できないことです。このエラーは、JSON 配列と .NET コレクション構造の基本的な違いに起因します。

問題の特定: 配列とオブジェクト

提供されたコード スニペットでは、Accounts プロパティは List として宣言されており、ユーザー アカウントを表す JSON オブジェクトの配列を受け取ることが想定されています。ただし、JSON 応答には、複数のキーと値のペアを含む単一のオブジェクトが含まれており、それぞれが関連付けられたアカウントを表します。この不一致により、「JsonObjectAttribute を型に追加して、JSON オブジェクトから強制的に逆シリアル化することもできます」エラーが発生します。

回避策: カスタム クラスと JsonProperty 属性を使用します

この問題を解決するには、個々のアカウントを表すカスタム クラス Account を定義し、Accounts プロパティに [JsonProperty] 属性の注釈を付けて、JSON 応答で対応するプロパティ名を指定する必要があります。

<code class="language-csharp">public class Account
{
    public string github;
}

[JsonProperty("accounts")]
public Account Accounts { get; set; }</code>
ログイン後にコピー

さらに、User クラスで JsonProperty 属性を使用して、プロパティをそれぞれの JSON プロパティ名に明示的にバインドし、シームレスなマッピングを確保できます。

<code class="language-csharp">[JsonProperty("username")]
public string Username { get; set; }

[JsonProperty("name")]
public string Name { get; set; }

[JsonProperty("location")]
public string Location { get; set; }</code>
ログイン後にコピー

これらの変更が実装されると、JsonConvert.DeserializeObject は、対応する関連アカウントが設定された Accounts プロパティを含む、厳密に型指定された User オブジェクトに JSON 応答を簡単に逆シリアル化できます。

以上がJsonConvert.DeserializeObject を使用して JSON 配列を C# コレクションに逆シリアル化する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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