19

メインのシリアライザーとして 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
};

出力:

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

しかし、この jsonContent をデシリアライズしたい場合、プロパティ Qty は常に 0 であり、デフォルト値に設定されていません。つまり、jsonContent をデシリアライズするとき、Quantity の DefaultValue は 0 ではなく 1 にする必要があるためです。

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

私は何をすべきか

4

2 に答える 2

14

属性はプロパティのDefaultValue値を設定しません。この質問を参照してください: .NET DefaultValue 属性

コンストラクターで値を設定することをお勧めします。

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

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

この行は次のとおりです。

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

AssignmentContentItemに設定Quantityされた になり1ます。

于 2013-03-17T19:59:29.257 に答える