JSON.NET を使用して JSON データを C# に逆シリアル化する: 欠落データを適切に処理する
C# で JSON データを操作する場合、JSON 構造に C# クラスで定義された特定のプロパティが欠落している状況に対処することが重要です。従来、JSON オブジェクトから各値を手動で抽出するのは面倒でエラーが発生しやすい作業でした。
幸いなことに、JSON.NET は洗練されたソリューションを提供します。解析している JSON 構造を反映する C# クラスを作成することで、JsonConvert.DeserializeObject
メソッドを利用できます。このメソッドは、JSON プロパティをクラス内の対応するプロパティに自動的にマップします。
たとえば、次の JSON データについて考えてみましょう:
<code class="language-json">{ "givenname": [ "Robert" ], "passwordexpired": "20091031041550Z", "accountstatus": [ "active" ], "accountstatusexpiration": [ "20100612000000Z" ], "accountstatusexpmaxdate": [ "20110410000000Z" ], "accountstatusmodifiedby": { "20100214173242Z": "tdecker", "20100304003242Z": "jsmith", "20100324103242Z": "jsmith", "20100325000005Z": "rjones", "20100326210634Z": "jsmith", "20100326211130Z": "jsmith" }, "accountstatusmodifytimestamp": [ "20100312001213Z" ], "affiliation": [ "Employee", "Contractor", "Staff" ], "affiliationmodifytimestamp": [ "20100312001213Z" ], "affiliationstatus": [ "detached" ], "entrycreatedate": [ "20000922072747Z" ], "username": [ "rjohnson" ], "primaryaffiliation": [ "Staff" ], "employeeid": [ "999777666" ], "sn": [ "Johnson" ] }</code>
と対応する C# クラス:
<code class="language-csharp">public class MyAccount { [JsonProperty(PropertyName = "username")] public string UserID { get; set; } [JsonProperty(PropertyName = "givenname")] public string GivenName { get; set; } [JsonProperty(PropertyName = "sn")] public string Surname { get; set; } [JsonProperty(PropertyName = "passwordexpired")] public DateTime PasswordExpire { get; set; } [JsonProperty(PropertyName = "primaryaffiliation")] public string PrimaryAffiliation { get; set; } [JsonProperty(PropertyName = "affiliation")] public string[] Affiliation { get; set; } [JsonProperty(PropertyName = "affiliationstatus")] public string AffiliationStatus { get; set; } [JsonProperty(PropertyName = "affiliationmodifytimestamp")] public DateTime AffiliationLastModified { get; set; } [JsonProperty(PropertyName = "employeeid")] public string EmployeeID { get; set; } [JsonProperty(PropertyName = "accountstatus")] public string AccountStatus { get; set; } [JsonProperty(PropertyName = "accountstatusexpiration")] public DateTime AccountStatusExpiration { get; set; } [JsonProperty(PropertyName = "accountstatusexpmaxdate")] public DateTime AccountStatusExpirationMaxDate { get; set; } [JsonProperty(PropertyName = "accountstatusmodifiedby")] public Dictionary<string, string> AccountStatusModifiedBy { get; set; } [JsonProperty(PropertyName = "accountstatusmodifytimestamp")] public DateTime AccountStatusModified { get; set; } [JsonProperty(PropertyName = "accountstatusexpnotice")] public string AccountStatusExpNotice { get; set; } [JsonProperty(PropertyName = "entrycreatedate")] public DateTime EntryCreatedate { get; set; } [JsonProperty(PropertyName = "entrydeactivationdate")] public DateTime EntryDeactivationDate { get; set; } }</code>
JsonConvert.DeserializeObject
メソッドを使用すると、JSON データを MyAccount
クラスのインスタンスに逆シリアル化できます。
<code class="language-csharp">var myAccount = JsonConvert.DeserializeObject<MyAccount>(jsonString);</code>
これにより、myAccount
のプロパティに JSON データの値が自動的に入力されます。
JSON 構造に AccountStatusExpNotice
や EntryDeactivationDate
などの一部のプロパティが欠落している場合でも、逆シリアル化プロセスはスムーズに進行し、C# クラスの対応するプロパティはデフォルト値に設定されます。このアプローチにより、複雑な条件チェックや手動による値の割り当てが不要になり、データ変換プロセスが簡素化されます。
以上がjson.netを使用してJSONをC#に脱着するときに、欠損データを優雅に処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。