Необязательное поле в Json классе

252
24 июня 2017, 09:47

У меня есть json, который я десериализую

 public class Item
        {
            public int bot { get; set; }
            public Item1[] items { get; set; }
            public string name { get; set; }
            public float price { get; set; }
        }

Все десериализуется отлично, однако есть такие случаи, когда поля price нет. NewtonsoftJson автоматом присваивает ему значение 0. Как сделать чтобы он туда записывал значение по умолчанию. Т.е. если поля нет - то ставим значение 0.

Answer 1

NewtonsoftJson не ставит ему автоматом 0. Это при создании объекта значение свойства price задается 0 по дефолту. Если хотите задать дефолтное значение для создаваемого объекта, сделайте это в конструкторе этого объекта.

public class Item
{
    public int bot { get; set; } // int - 0 по дефолту
    public Item1[] items { get; set; } // [] - null по дефолту
    public string name { get; set; } // string - null по дефолту
    public float price { get; set; } // float - 0 по дефолту (изменяем в конструкторе)
    public Item()
    {
        price = 99999; // задали другое значение
    }
}

Как верно заметил @Андрей, начиная с C# 6.0 можно писать так:

public float price { get; set; } = 99999;

В итоге такая запись развернется в конструкцию с конструктором при компиляции.

Пример!

READ ALSO
Статический класс или синглтон

Статический класс или синглтон

Добрый деньЕсть, например, класс:

264
Перстался запускатся проект на Net Core

Перстался запускатся проект на Net Core

При поытке запустить NetCore приложение из VS стала появлятся такая ошибка:

248
SendInput для Alt + NumPad*

SendInput для Alt + NumPad*

ЗдравствуйтеХотел попросить помощи в следующем вопросе: как эмулировать ввод Alt + NumPad* ?

248
Регулярное выражение для url'ов

Регулярное выражение для url'ов

Есть регулярка для урлов:

457