我已将我的项目升级到 netcore 3.0,并且我正在重构项目以使用新的可为空引用类型功能,但由于以下问题很快就卡住了。
假设我使用了一个返回以下 JSON 的 REST api:
{
"Name": "Volvo 240",
"Year": 1989
}
此 api 始终返回名称/年份,因此它们不可为空。
我会使用这个简单的类进行反序列化:
public class Car
{
public string Name {get; set;}
public int Year {get; set;}
}
我会Car
使用 new 将其反序列化为一个实例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
序列化程序不支持带参数的构造函数。
所以我的问题是:我将如何声明Car
它Name
是不可为空的并让它在System.Text.Json
没有“不可空”警告的情况下使用?
我不想让它可以为空,因为在启用可空引用类型时,我基本上必须对所有内容进行空检查,并且因为我的示例中的 REST API 说它们总是被提供,它们不应该是可空的。