【问题标题】:Accept only number formats for a property from JSON仅接受来自 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 的转换。

【问题讨论】:

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


    【解决方案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;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-09-11
      • 1970-01-01
      • 1970-01-01
      • 2018-07-17
      • 2018-09-27
      • 2018-11-08
      • 1970-01-01
      相关资源
      最近更新 更多