Подтвердить что ты не робот

Значение по умолчанию для отсутствующих свойств с помощью JSON.net

Я использую Json.net для сериализации объектов в базе данных.

Я добавил новое свойство в класс (которого нет в json в базе данных), и я хочу, чтобы новое свойство имело значение по умолчанию, когда отсутствует в json.

Я попробовал атрибут DefaultValue, но он не работает. Я использую частные сеттеры и конструктор для десериализации json, поэтому установка значения свойства в конструкторе не будет работать, поскольку есть параметр со значением.

Ниже приведен пример:

    class Cat
    {
        public Cat(string name, int age)
        {
            Name = name;
            Age = age;
        }

        public string Name { get; private set; }

        [DefaultValue(5)]            
        public int Age { get; private set; }
    }

    static void Main(string[] args)
    {
        string json = "{\"name\":\"mmmm\"}";

        Cat cat = JsonConvert.DeserializeObject<Cat>(json);

        Console.WriteLine("{0} {1}", cat.Name, cat.Age);
    }

Я ожидаю, что возраст будет 5, но он равен нулю.

Любые предложения?

4b9b3361

Ответ 1

Я нашел ответ, просто нужно добавить следующий атрибут:

[JsonProperty(DefaultValueHandling = DefaultValueHandling.Populate)]

В вашем примере:

class Cat
{
    public Cat(string name, int age)
    {
        Name = name;
        Age = age;
    }

    public string Name { get; private set; }

    [DefaultValue(5)]            
    [JsonProperty(DefaultValueHandling = DefaultValueHandling.Populate)]
    public int Age { get; private set; }
}

static void Main(string[] args)
{
    string json = "{\"name\":\"mmmm\"}";

    Cat cat = JsonConvert.DeserializeObject<Cat>(json);

    Console.WriteLine("{0} {1}", cat.Name, cat.Age);
}

См. Справочник Json.Net