【发布时间】:2020-02-02 14:07:58
【问题描述】:
我已将我的项目升级到 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;}
}
我会使用新的 System.Text.Json 将其反序列化为 Car 实例
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 说它们总是被提供,它们不应该可以为空.
【问题讨论】:
标签: json .net-core-3.0 nullable-reference-types system.text.json