不包含在JSON中时,必需的数字参数默认为0

Ant*_*rim 1 c# asp.net json asp.net-web-api asp.net-web-api2

我有一个模型,我使用DataAnnotations来执行验证,例如

public class OrderDTO
{
    [Required]
    public int Id { get; set; }

    [Required]
    public Decimal Amount { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

然后我检查每个请求中的ModelState以确保JSON有效.

但是,我在Amount上面的数字属性方面遇到了麻烦.即使它被设置为[Required],如果它没有包含在JSON中,它将跳过ModelState验证,因为它自动默认为0而不是null,因此模型看起来有效,即使它不是.

"修复"这个的简单方法是将所有数字属性设置为可为空(int?,Decimal?).如果我这样做,默认为0并不会发生,但我不喜欢这个作为一个明确的解决方案,因为我需要改变我的模型.

有没有办法设置属性,null如果它们不是JSON的一部分?

tda*_*t00 5

因为Decimal是一个不可为空的类型所以你不能这样做.你需要Decimal?绑定null值.