Я обновил свой проект до netcore 3.0, и я нахожусь в процессе рефакторинга проекта, чтобы использовать новую функцию типов ссылочных значений, которые можно обнулять, но застрял довольно быстро из-за следующей проблемы. потреблять REST API, который возвращает следующий JSON:
{
"Name": "Volvo 240",
"Year": 1989
}
Этот API всегда возвращает имя / год, поэтому они не могут быть обнулены.
Я бы использовал этот простой класс для сериализации:
public class Car
{
public string Name {get; set;}
public int Year {get; set;}
}
И я бы сериализовал это для экземпляра Car
, используя новый System.Text.Json
var car = JsonSerializer.Deserialize<Car>(json);
Это все работает, но при включении обнуляемых ссылочных типов я получаю предупреждение вCar
класс, который Name
объявлен как необнуляемый, но может быть нулевым. Я понимаю, почему я получаю это, поскольку можно создать экземпляр этого объекта без инициализации свойства Name
.
Так что в идеале Car
должно выглядеть так:
public class Car
{
public string Name { get; }
public int Year { get; }
public Car(string name, int year)
{
Name = name;
Year = year;
}
}
Но это нене работает, потому что System.Text.Json
serializer не поддерживает конструкторы с параметрами.
Так что мой вопрос: как бы я объявил Car
, чтобы Name
не обнулялся, и чтобы он работал с System.Text.Json
без получения предупреждения «не обнуляемое»? `
Я не хочу делать его обнуляемым, потому что мне нужно было бы делать нулевые проверки практически всего при включении обнуляемых ссылочных типов, а также с помощью REST APIв моем примере говорится, что они всегда при условии, что они не должны быть обнуляемыми.