我已将项目升级到 net core 3.0,并且正在重构项目以使用新的可为空引用类型功能,但由于以下问题很快就陷入困境。
假设我使用一个 REST api,它返回以下 JSON:
{
"Name": "Volvo 240",
"Year": 1989
}
此 api 始终返回名称/年份,因此它们不可为 null。
我将使用这个简单的类进行反序列化:
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
被声明为不可为 null,但可以为 null。我明白为什么我得到这个,因为可以实例化这个对象而不初始化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 表示它们始终提供它们不应该为空。