はじめに
今回はSystem.Text.Json
の[JsonRequired]
について書きたいと思います。
前提
System.Text.Jsonでデシリアライズする際に、[JsonRequired]
が付与されていないプロパティに対してはjsonに値がなくてもエラーが吐かれることはなく、デフォルト値が代入されます。
public class Program { public static void Main(string[] args) { var json = "{ }"u8; // 別にエラーになるわけではないので注意 var hoge = JsonSerializer.Deserialize<Hoge>(json); if (hoge == null) throw new Exception(); // 0 Console.WriteLine(hoge.Num); // True Console.WriteLine(hoge.Num2 == null); // True Console.WriteLine(hoge.Text == null); // Text2 Console.WriteLine(hoge.Text2); } } public class Hoge { // デフォルト値 : 0 public int Num { get; init; } // デフォルト値 : null public int? Num2 { get; init; } // デフォルト値 : null public string Text { get; init; } // jsonに値がないと Text2 になる public string Text2 { get; init; } = "Text2"; }
[JsonRequired]について
[JsonRequired]
を付与することで、デシリアライズするさいにプロパティが存在しないとJsonException
を投げるようにすることができます。
public class Program { public static void Main(string[] args) { var json = "{ \"Num\" : 10 }"u8; // Numがない場合 : Unhandled exception. System.Text.Json.JsonException: JSON deserialization for type 'Sample.Hoge' was missing required properties, including the following: Num var hoge = JsonSerializer.Deserialize<Hoge>(json); if (hoge == null) throw new Exception(); // 10 Console.WriteLine(hoge.Num); // True Console.WriteLine(hoge.Num2 == null); // True Console.WriteLine(hoge.Text == null); // Text2 Console.WriteLine(hoge.Text2); } } public class Hoge { // 必ずNumがないとJsonExceptionがなげられる [JsonRequired] public int Num { get; init; } // [JsonRequired]が付与されていなければ必須ではない // デフォルト値 : null public int? Num2 { get; init; } // デフォルト値 : null public string Text { get; init; } // jsonに値がないと Text2 になる public string Text2 { get; init; } = "Text2"; }