[C#] 為什麼當我用JSON.NET反序列化忽略我的默認值?


Answers

你可以使用DefaultValueHandling.Populate設置,這樣Json.Net會用默認值填充創建的對象。

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

Question

我使用JSON.NET作為我的主串行器。

這是我的模型,看看我已經設置了一些JSONProperties和一個DefaultValue

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

當我序列化List<AssignmentContentItem> ,它做了一個很好的工作:

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

OUTPUT:

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

但是當我想反序列化這個jsonContent時,屬性Qty總是為0,並沒有設置為默認值。 我的意思是,當我反序列化jsonContent時,DefaultValue for Quantity應該是一個而不是0。

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

我該怎麼辦