2013-03-16 29 views
10

JSON.NET'i ana diziselleştirici olarak kullanıyorum.Neden JSON.NET ile seri hale getirdiğimde varsayılan değerimi yoksayar?

Bu benim modelim, bazı JSONProperties ve bir DefaultValue ayarladık.

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

: Bu jsonContent serisini istiyorum Fakat mülkiyet Adet

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

olduğunu

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

Ben List<AssignmentContentItem> serialize

, iyi bir iş yapıyor her zaman 0 ve varsayılan değere ayarlanmamış. Ben jsonContent, defaultValue Miktarı için ben

+0

Eğer DefaultValueHandling.Populate ayarını denedin mi? – Slugart

cevap

12

DefaultValue nitelik özelliğinin değerini belirlemez ne yapmalıyım biri yerine 0.

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

olması gerektiğini serisini zaman Yani. .NET DefaultValue attribute

Ne yapıcı değeri kuruyor yapıyor daha iyi olabilir: Bu soruya bakın

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

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

Nerede bu satırı: onun Quantity seti ile bir AssignmentContentItem yılında

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

Sonuçları 1.

6

DefaultValueHandling.Populate ayarını kullanarak Json.Net oluşturulan nesneyi varsayılan değerle doldurur.

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

İlgili konular