仅接受来自JSON的属性的数字格式

时间:2012-12-20 06:03:42

标签: json asp.net-web-api number-formatting jsonserializer

我正在开发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”是一个双重值。所以这里发生的是当我将“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 个答案:

答案 0 :(得分:0)

我不知道它是否正确。我根据自己的经验告诉我的建议。为什么不能创建自定义验证属性并检查数据的数据类型。

public class IsNumberAttribute : ValidationAttribute
{

    protected override ValidationResult IsValid(object value, ValidationContext context)
    {
       if(value.GetType() != Int)
          return new ValidationResult("Only Numbers Allowed");
        return null;
    }
}