2013-03-16 12 views
10

Używam JSON.NET jako mojego głównego serializera.Dlaczego podczas deserializacji z JSON.NET ignoruje moją wartość domyślną?

To jest mój model, wyglądam tak, że ustawiłem niektóre JSONProperties i DefaultValue.

public class AssignmentContentItem 
{ 
    [JsonProperty("Id")] 
    public string Id { get; set; } 
    [JsonProperty("Qty")] 
    [DefaultValue(1)] 
    public int Quantity { get; set; } 
} 

Kiedy serializować List<AssignmentContentItem>, że robi dobrą pracę:

private static JsonSerializerSettings s = new JsonSerializerSettings 
{ 
    DefaultValueHandling = DefaultValueHandling.Ignore, 
    NullValueHandling = NullValueHandling.Ignore 
}; 

WYJŚCIE:

[{"Id":"Q0"},{"Id":"Q4"},{"Id":"Q7"}] 

Ale kiedy chciałbym deserializować ten jsonContent, Nieruchomość jest Ilosc zawsze 0 i nie jest ustawione na wartość domyślną. To znaczy, że kiedy deserializowania jsonContent, jak DefaultValue na ilość powinna być jednym zamiast 0.

public static List<AssignmentContentItem> DeserializeAssignmentContent(string jsonContent) 
{ 
    return JsonConvert.DeserializeObject<List<AssignmentContentItem>>(jsonContent, s); 
} 

Co należy zrobić

+0

Próbowałaś ustawienie DefaultValueHandling.Populate? – Slugart

Odpowiedz

12

Atrybut DefaultValue nie ustawia wartość właściwości. Zobacz na to pytanie: .NET DefaultValue attribute

Co może być lepiej robi jest ustawienie wartości w konstruktorze OFF:

public class AssignmentContentItem 
{ 
    [JsonProperty("Id")] 
    public string Id { get; set; } 
    [JsonProperty("Qty")] 
    public int Quantity { get; set; } 

    public AssignmentContentItem() 
    { 
     this.Quantity = 1; 
    } 
} 

Gdzie ta linia:

AssignmentContentItem item = 
    JsonConvert.DeserializeObject<AssignmentContentItem>("{\"Id\":\"Q0\"}"); 

wyników w AssignmentContentItem z jego Quantity zestawie do 1.

6

Możesz użyć ustawienia DefaultValueHandling.Populate, aby Json.Net wypełnił utworzony obiekt wartością domyślną.

public static List<AssignmentContentItem> DeserializeAssignmentContent(string jsonContent) 
{ 
    return JsonConvert.DeserializeObject<List<AssignmentContentItem>>(jsonContent, new JsonSerializerSettings 
    { 
      DefaultValueHandling = DefaultValueHandling.Populate, 
      NullValueHandling = NullValueHandling.Ignore 
    }); 
} 

http://www.newtonsoft.com/json/help/html/T_Newtonsoft_Json_DefaultValueHandling.htm

Powiązane problemy