JsonConvert.DeserializeObject を使用して JSON を C# POCO クラスに解析します
JSON を C# POCO クラスに逆シリアル化するときにエラー (「逆シリアル化できません...」例外など) が発生した場合は、逆シリアル化を成功させるための要件を理解することが重要です。
具体的には、JsonConvert.DeserializeObject
メソッドでは、JSON が POCO クラスで定義されている予期される構造とデータ型に準拠している必要があります。
エラーの解決
このエラーを解決する鍵は 2 つの側面にあります:
リストのプロパティを正しく宣言します:
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>
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 サイトの他の関連記事を参照してください。