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
Libérer: 2025-01-26 16:36:11
original
929 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion
:

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal