仅接受来自 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中仅接受来自键盘的数字数据

Phpmyadmin 仅接受来自具有多个输入值的 json 数组中的一个条目

DataTable 不接受来自数据库的 json

尝试将 UITextField 格式化为像货币计算器一样仅用于 iOS 中的数字输入