缺少属性时如何强制 System.Text.Json 序列化程序抛出异常?

Pav*_*nin 5 c# json .net-core system.text.json

Json.NET 行为可以由属性定义:如果 json 负载不包含必需的属性,则使用默认值或仅抛出异常。

然而System.Text.Json序列化器默默地什么都不做。
上课:

public sealed class Foo
{
    [Required]
    public int Prop {get;set;} = 10;
}
Run Code Online (Sandbox Code Playgroud)

并反序列化空对象:

JsonSerializer.Deserialize<Foo>("{}");
Run Code Online (Sandbox Code Playgroud)

我只是得到一个Foowith的实例Prop=10。我找不到任何设置JsonSerializerOptions来强制它抛出异常。是否可以?

viv*_*una 5

如果没有收到目标类型的属性之一的值,System.Text.Json 不会引发异常。您需要实现一个自定义转换器。

参考:https://learn.microsoft.com/en-us/dotnet/standard/serialization/system-text-json-migrate-from-newtonsoft-how-to#required-properties


Mat*_*nny 5

[JsonRequired]属性System.Text.Json按要求工作,但从 .NET 7 开始可用。请参阅必需的属性文档。

此外,在 .NET 8 中,您还可以使用JsonUnmappedMemberHandling.Disallow选项强制 JSON 字符串正确映射到 POCO/模型属性。请参阅处理反序列化期间丢失的成员文档。