2015-06-22 12 views
12

Sto utilizzando Json.Net per serializzare e deserializzare le classi su json e viceversa.Ignora una proprietà durante la deserializzazione utilizzando Json.Net con ItemRequired = Richiesto. Sempre

Ho aggiunto a una classe contrassegnata con [JsonObject(ItemRequired = Required.Always)] (o Required.Always) una nuova proprietà get-only. Che si traduce in seguente JsonSerializationException:

Newtonsoft.Json.JsonSerializationException: proprietà Required '<PropertyName>' non trovato in JSON

ho pensato che la proprietà di marcatura con JsonIgnore avrebbe risolto il problema, ma questo non funziona .

Come posso comunicare a Json.Net che questa proprietà deve essere ignorata?

Ecco un esempio minimo che riproduce il problema:

[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); 
} 

risposta

19

Evidentemente JsonIgnore sarà solo controllare la serializzazione in questo caso. JsonIgnore è necessario per specificare che la proprietà FullName non deve essere serializzata alla rappresentazione json.

Per ignorare la proprietà durante la deserializzazione, è necessario aggiungere l'annotazione JsonProperty con Required = Required.Default (che significa non necessario).

Quindi, questo è come evitare il 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; }} 
} 
Problemi correlati