C# ASP.NET Web API将JSON转换为对象实例会跳过int值的数据注释
Json绑定到对象时出现问题。int值未通过适当的属性进行验证。 我想验证超时值。 简化类:C# ASP.NET Web API将JSON转换为对象实例会跳过int值的数据注释,c#,asp.net,json,modelstate,C#,Asp.net,Json,Modelstate,Json绑定到对象时出现问题。int值未通过适当的属性进行验证。 我想验证超时值。 简化类: public class SimpleObject { [Required] public string Command { get; set; } [Required] public int TimeOut { get; set; } [Required] public string Type { get; set; } } 简单控制器: [H
public class SimpleObject
{
[Required]
public string Command { get; set; }
[Required]
public int TimeOut { get; set; }
[Required]
public string Type { get; set; }
}
简单控制器:
[HttpPost]
public ActionResult Edit(SimpleObject request)
{
var errors = ModelState.Values.Where(x => x.Errors.Count > 1);
return new EmptyResult();
}
我使用fiddler发送这个Json
{"type":"Foo"}
乐趣现在以ModelState开始。控制器上的键显示以下内容:
Count = 2
[0]: "Type"
[1]: "Command"
超时的ModelState验证密钥在哪里?如果我尝试发送Type和Command并忽略超时,它甚至会将ModelState设置为有效。
尝试使用mvc 3和mvc 4时超时不是空类型,默认情况下等于0。超时不是空类型,默认情况下等于0。这里的问题是验证在序列化后工作。json被反序列化到对象,超时为0。但是required属性只检查null,所以TimeOut是可以的 您可以将超时设置为空:
public int? Timeout { get; set; }
或者使用Range属性:
[Range(1, 10000)]
public int Timeout { get; set; }
这里的问题是验证在序列化之后工作。json被反序列化到对象,超时为0。但是required属性只检查null,所以TimeOut是可以的 您可以将超时设置为空:
public int? Timeout { get; set; }
或者使用Range属性:
[Range(1, 10000)]
public int Timeout { get; set; }
创建对象SimpleObject时,超时设置为零(默认int值)。在验证过程中,您可以检查是否设置了超时。将类型更改为“int?”或添加范围验证程序。创建对象SimpleObject时,超时设置为零(默认int值)。在验证过程中,您可以检查是否设置了超时。将类型更改为“int?”或添加范围验证器。