ホームページ > バックエンド開発 > C++ > JsonConvert.DeserializeObject を使用して JSON を C# POCO クラスに正常に逆シリアル化する方法

JsonConvert.DeserializeObject を使用して JSON を C# POCO クラスに正常に逆シリアル化する方法

Barbara Streisand
リリース: 2025-01-15 11:42:43
オリジナル
482 人が閲覧しました

How to Successfully Deserialize JSON into a C# POCO Class Using JsonConvert.DeserializeObject?

JsonConvert.DeserializeObject を使用して JSON を C# POCO クラスに解析します

JSON を C# POCO クラスに逆シリアル化するときにエラー (「逆シリアル化できません...」例外など) が発生した場合は、逆シリアル化を成功させるための要件を理解することが重要です。

具体的には、JsonConvert.DeserializeObject メソッドでは、JSON が POCO クラスで定義されている予期される構造とデータ型に準拠している必要があります。

エラーの解決

このエラーを解決する鍵は 2 つの側面にあります:

  1. リストのプロパティを正しく宣言します: JSON 応答に、POCO クラスで List<T> として宣言されたプロパティのオブジェクトの配列が含まれていることを確認してください。例:

    <code class="language-json"> {
       "username": "username",
       // ... 其他属性
       "accounts": [
         { "github": "github-username" },
         // ... 其他帐户
       ]
     }</code>
    ログイン後にコピー

    POCO クラスでは、Accounts 属性は次のように宣言する必要があります:

    <code class="language-csharp"> [JsonProperty("accounts")]
     public List<Account> Accounts { get; set; }</code>
    ログイン後にコピー
  2. JsonProperty 属性を使用します: JsonProperty 属性は、JSON 属性名を対応する POCO クラス属性にマップします。デフォルトでは、JSON プロパティ名は大文字と小文字が区別され、C# プロパティ名と一致します。このマッピングをカスタマイズするには、JsonProperty 属性を使用します:

    <code class="language-csharp"> [JsonProperty("github")]
     public string GithubUsername { get; set; }</code>
    ログイン後にコピー

これは修正された例です:

<code class="language-csharp">public class User
{
    [JsonProperty("username")]
    public string Username { get; set; }
    // ... 其他属性
    [JsonProperty("accounts")]
    public List<Account> Accounts { get; set; }
}

public class Account
{
    [JsonProperty("github")]
    public string GithubUsername { get; set; }
}

// 反序列化代码
var json = @"{
  'username': 'jdoe',
  // ... 其他属性
  'accounts': [{ 'github': 'jdoe-github' }]
}";
var user = JsonConvert.DeserializeObject<User>(json);</code>
ログイン後にコピー

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

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