Вопрос по deserialization, default-value, json.net, serialization, c# – Почему при десериализации с помощью JSON.NET игнорируется значение по умолчанию?

15

Я использую JSON.NET в качестве основного сериализатора.

Это моя модель, посмотрите, что ямы установили некоторыеJSONProperties иDefaultValue

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

Когда я сериализуюListВыполнил хорошую работу:

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

ВЫХОД:

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

Но когда яЯ хотел бы десериализовать этот jsonContent, свойство Qty всегда равно 0 и не имеет значения по умолчанию. Я имею в виду, что при десериализации этого jsonContent значение DefaultValue для количества должно быть равно 1, а не 0.

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

Что я должен делать

Вы пробовали параметр DefaultValueHandling.Populate? Slugart

Ваш Ответ

2   ответа
10

Вы можете использовать параметр DefaultValueHandling.Populate, чтобы Json.Net заполнял созданный объект значением по умолчанию.

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

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

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("{\"Id\":\"Q0\"}");

Результаты вAssignmentContentItem с этимиQuantity установлен в .1

Похожие вопросы