J'utilise Json.Net pour sérialiser et désérialiser les classes vers json et retour.
J'ai ajouté à une classe marquée par [JsonObject(ItemRequired = Required.Always)]
(ou Required.Always
) une nouvelle propriété get-only. Cela se traduit par le JsonSerializationException
suivant:
Newtonsoft.Json.JsonSerializationException: propriété requise
'<PropertyName>'
introuvable dans JSON
Je pensais que marquer cette propriété avec JsonIgnore
résoudrait le problème, mais cela ne fonctionne pas.
Comment puis-je dire à Json.Net que cette propriété doit être ignorée?
Voici un exemple minimal reproduisant le problème:
[JsonObject(ItemRequired = Required.Always)]
public class Hamster
{
public string FirstName { get; set; }
public string LastName { get; set; }
[JsonIgnore]
public string FullName { get { return FirstName + LastName; }}
}
private static void Main()
{
var hamster = new Hamster {FirstName = "Bar", LastName = "Arnon"};
var serializeObject = JsonConvert.SerializeObject(hamster);
var deserializeObject = JsonConvert.DeserializeObject<Hamster>(serializeObject);
}
Évidemment, JsonIgnore
ne contrôlera la sérialisation que dans ce cas. JsonIgnore
est requis pour spécifier que la propriété FullName
ne doit pas être sérialisée à la représentation json.
Pour ignorer la propriété pendant la désérialisation, nous devons ajouter l'annotation JsonProperty
avec Required = Required.Default
(ce qui signifie non requis).
Voici donc comment éviter le JsonSerializationException
:
[JsonObject(ItemRequired = Required.Always)]
public class Hamster
{
public string FirstName { get; set; }
public string LastName { get; set; }
[JsonIgnore]
[JsonProperty(Required = Required.Default)]
public string FullName { get { return FirstName + LastName; }}
}