ホームページ > バックエンド開発 > C++ > json.netを使用してJSONをC#に脱着するときに、欠損データを優雅に処理するにはどうすればよいですか?

json.netを使用してJSONをC#に脱着するときに、欠損データを優雅に処理するにはどうすればよいですか?

Susan Sarandon
リリース: 2025-01-26 16:36:11
オリジナル
929 人が閲覧しました

How can I gracefully handle missing data when deserializing JSON to C# using JSON.NET?

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 構造に AccountStatusExpNoticeEntryDeactivationDate などの一部のプロパティが欠落している場合でも、逆シリアル化プロセスはスムーズに進行し、C# クラスの対応するプロパティはデフォルト値に設定されます。このアプローチにより、複雑な条件チェックや手動による値の割り当てが不要になり、データ変換プロセスが簡素化されます。

以上がjson.netを使用してJSONをC#に脱着するときに、欠損データを優雅に処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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