仅接受来自 JSON 的属性的数字格式
Posted
技术标签:
【中文标题】仅接受来自 JSON 的属性的数字格式【英文标题】:Accept only number formats for a property from JSON 【发布时间】:2012-12-07 14:56:00 【问题描述】:我正在开发 ASP.Net Web API 应用程序,我们正在为不同的客户端公开一个 REST API。我在获取用户的 JSON 文件并将它们转换为数据模型类时遇到问题。我的 JSON 如下所示。
"engagementid":1,"clientname":"fsdfs","myno":"23,45","address1":"fsd","address2":"fsdfs","city":"fsdfs","zip":"fsdf","info":"fsdfs","country":"fsdfs","currency":"NOK"
您可以看到我的“myno”是作为字符串发送的。但在我的服务器数据模型中,“myno”是一个 double 值。所以这里发生的情况是,当我将“myno”的值发送为“23,45”时,它被分配给我的模型的 MyNo 属性为 2345。这是错误的,因为您可以看到数字已因此而更改错误的转换。我只需要限制这种转换。我的意思是,如果他为“myno”属性发送一个字符串,我想向他发送一个错误。由于它是我的服务器数据模型中的双精度值,因此我只想接受来自客户端的数字作为此属性。也就是说,我想要这样。
"myno":2345 //correct
"myno":"2345" //wrong. I want to send a error to user by saying, "We only accept Numbers for this value"
我该怎么做?
更新: 如果我在服务器模型中使用 int,这个问题就会得到解决。我的意思是,如果客户端将字符串发送到在我的模型中表示为 int 的属性,那么它会给用户一个错误,说无法完成字符串到 int 的转换。
【问题讨论】:
【参考方案1】:我不知道它是否正确。我只是根据我的经验告诉我的建议。为什么不能创建自定义验证属性并检查数据的数据类型。
public class IsNumberAttribute : ValidationAttribute
protected override ValidationResult IsValid(object value, ValidationContext context)
if(value.GetType() != Int)
return new ValidationResult("Only Numbers Allowed");
return null;
【讨论】:
以上是关于仅接受来自 JSON 的属性的数字格式的主要内容,如果未能解决你的问题,请参考以下文章
来自包含双精度数字的 Json 帖子的错误 400(错误请求)
JavaScript 在javascript中仅接受来自键盘的数字数据