Maison >développement back-end >C++ >Comment puis-je gérer gracieusement les données manquantes lors de la désérialisation de JSON en C# à l'aide de JSON.NET ?

Comment puis-je gérer gracieusement les données manquantes lors de la désérialisation de JSON en C# à l'aide de JSON.NET ?

Susan Sarandon
Susan Sarandonoriginal
2025-01-26 16:36:11961parcourir

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

Utilisez JSON.net en série pour séquencer les données JSON à C #: Traitement des données manquantes élégamment

Lors du traitement des données JSON en C #, il est important de traiter la situation où la structure JSON manque certains attributs définis dans la classe C #. Traditionnellement, la méthode d'extraction manuellement de chaque valeur de l'objet JSON est fastidieuse et facile à faire des erreurs.

Heureusement, JSON.net fournit une solution élégante. En créant une classe C # qui reflète la structure JSON que vous analysez, vous pouvez utiliser la méthode

. Cette méthode mappera automatiquement l'attribut JSON aux attributs correspondants de la classe.

JsonConvert.DeserializeObject Par exemple, considérez les données JSON suivantes:

et la classe C # correspondante:
<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>

En utilisant la méthode , vous pouvez recouvrir les données JSON dans l'instance de la classe
<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 MyAccount Cela utilisera automatiquement la valeur de

dans les données JSON.
<code class="language-csharp">var myAccount = JsonConvert.DeserializeObject<MyAccount>(jsonString);</code>

Même si la structure JSON n'a pas certains attributs, tels que myAccount ou

, le processus de dépendance sera effectué en douceur et les attributs correspondants de la classe C # seront définis sur sa valeur silencieuse. Cette méthode élimine les besoins des conditions complexes ou de l'attribution de valeur manuelle et simplifie votre processus de conversion de données.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn