Значение по умолчанию для отсутствующих свойств с помощью 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, но он равен нулю.
Любые предложения?
Ответы
Ответ 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