Personnalisation des propriétés JSON avec l'attribut JsonProperty en C#

Modification des noms de propriétés lors de la sérialisation

L'attribut JsonProperty permet de définir des noms personnalisés pour les propriétés dans la sortie JSON.

public class Film
{
    [JsonProperty("titre")]
    public string Titre { get; set; }

    [JsonProperty("date_parution")]
    public DateTime DateParution { get; set; }
}

Film filmPrefere = new Film
{
    Titre = "Inception",
    DateParution = new DateTime(2010, 7, 16)
};

string jsonFilm = JsonConvert.SerializeObject(filmPrefere, Formatting.Indented);
Console.WriteLine(jsonFilm);
// {
//   "titre": "Inception",
//   "date_parution": "2010-07-16T00:00:00"
// }

Ordre de sérialisation des propriétés

La propriété Order dans JsonProperty contrôle la séquence des champs dans le document JSON.

public class ProfilUtilisateur
{
    public string Courriel { get; set; }

    [JsonProperty(Order = 1)]
    public bool Archive { get; set; }

    [JsonProperty(Order = 2)]
    public DateTime DateArchivage { get; set; }

    public DateTime DateCreation { get; set; }
    public DateTime DateModification { get; set; }

    [JsonProperty(Order = -2)]
    public string NomComplet { get; set; }
}

ProfilUtilisateur profil = new ProfilUtilisateur
{
    NomComplet = "Marie Dupont",
    Courriel = "marie@example.com",
    Archive = true,
    DateArchivage = new DateTime(2022, 5, 15),
    DateModification = new DateTime(2022, 5, 15),
    DateCreation = new DateTime(2020, 3, 10)
};

string jsonProfil = JsonConvert.SerializeObject(profil, Formatting.Indented);
Console.WriteLine(jsonProfil);
// {
//   "NomComplet": "Marie Dupont",
//   "Courriel": "marie@example.com",
//   "DateCreation": "2020-03-10T00:00:00",
//   "DateModification": "2022-05-15T00:00:00",
//   "Archive": true,
//   "DateArchivage": "2022-05-15T00:00:00"
// }

Validation avec Required pendant la désérialisation

Utilisez Required dans JsonProperty pour imposer la présence de propriétés dans le JSON entrent.

public class Produit
{
    [JsonProperty(Required = Required.Always)]
    public string Designation { get; set; }

    [JsonProperty(Required = Required.AllowNull)]
    public DateTime? DatePeremption { get; set; }
}

string jsonEntree = @"{
  'Designation': 'Ordinateur portable',
  'DatePeremption': null
}";

Produit produit = JsonConvert.DeserializeObject<Produit>(jsonEntree);

Console.WriteLine(produit.Designation);
// Ordinateur portable

Console.WriteLine(produit.DatePeremption);
// null

Exclure des propriétés avec JsonIgnore

L'attribut JsonIgnore empêche une propriété d'être incluse dans la sérialisation ou désérialisation.

public class Compte
{
    public string Prenom { get; set; }
    public string AdresseEmail { get; set; }

    [JsonIgnore]
    public string MotDePasseHache { get; set; }
}

Étiquettes: CSharp JSON newtonsoft-json jsonproperty serialization

Publié le 12 juin à 16h24