将可空的十进制数从json传递到ASP.NET MVC Controller Action?

我有一个Asp.NET MVC控制器动作,它接收一个DTO,而DTO又包含一个可以为空的十进制属性。

例如

[DataContact] public class MyDTO { //other properties [DataMember] public decimal? SomeProp {get;set;} } 

我的动作看起来像这样:

  public JsonResult SaveMyDTO(MyDTO dto) {... 

我可以看到js客户端传递了正确的json数据,为“SomeProp”设置了值,但是,在服务器上反序列化时没有设置该属性,其他属性是,但不是可以为空的十进制prop。

使它运作的最简单方法是什么? 将属性转换为字符串?

我假设您将JSON数据作为数值发送到SomeProp ,如下所示:

 var json = { "SomeProp": 2.233 }; 

MVC中的序列化例程有时会出现可以为空的数值问题,因此如果是这种情况,请尝试在发送请求之前将该值转换为字符串:

 var json = { "SomeProp": "2.233" }; 

编辑
刚刚注意到你在问题的最后一行提到了这个解决方案:)

将属性更改为nullable double可使其正常工作。