プロジェクトを netcore 3.0 にアップグレードし、新しい null 許容参照型機能を使用するようにプロジェクトをリファクタリングしている最中ですが、次の問題が原因ですぐに行き詰まりました。
次の JSON を返す REST API を使用するとします。
{
"Name": "Volvo 240",
"Year": 1989
}
この API は常に名前/年を返すため、null 非許容です。
この単純なクラスを逆シリアル化に使用します。
public class Car
{
public string Name {get; set;}
public int Year {get; set;}
}
Car
そして、これをnew を使用してインスタンスにデシリアライズしますSystem.Text.Json
var car = JsonSerializer.Deserialize<Car>(json);
これはすべて機能しますが、null 許容参照型を有効にすると、null 非許容として宣言されているが null になる可能性がある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
はパラメーターを持つコンストラクターをサポートしていないため、これは機能しません。
したがって、私の質問は次のとおりです。それをnull不可に宣言し、「null不可」の警告を表示せずに動作させるにはどうすればよいCar
ですName
かSystem.Text.Json
?`
null 許容の参照型を有効にする場合、基本的にすべてに対して null チェックを行う必要があるため、null を許容したくありません。