2013-03-16 12 views
10

私はメインのシリアライザとしてJSON.NETを使用しています。JSON.NETで逆シリアル化を行うと、デフォルト値が無視されるのはなぜですか?

これは私のモデルです。JSONPropertiesDefaultValueを設定しました。私はList<AssignmentContentItem>をシリアル化するとき

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

、それは良い仕事をしている:

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

OUTPUT:

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

しかし、私はこのjsonContentをデシリアライズしたいとき、プロパティ数量があるの常に0で、デフォルト値に設定されていません。私は数量のためのDefaultValueとしてjsonContentは、0ではなく

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

の1、私は

+0

あなたはDefaultValueHandling.Populateの設定を試してみましたか? – Slugart

答えて

12

DefaultValue属性はプロパティの値を設定していない何をすべきであることを逆シリアル化するとき、私は、意味します。あなたがやったほうが良いかもしれませんが、コンストラクタで値を設定している.NET DefaultValue attribute

:この質問を参照してください

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

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

このライン:そのQuantityセットとAssignmentContentItem

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

結果1。 Json.Netは、デフォルト値で作成されたオブジェクトを移入するように

6

あなたはDefaultValueHandling.Populate設定を使用することができます。

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

関連する問題