将 JSON 发布到 ASP.NET MVC 可空短属性

Posted

技术标签:

【中文标题】将 JSON 发布到 ASP.NET MVC 可空短属性【英文标题】:Posting JSON to ASP.NET MVC Nullable Short Property 【发布时间】:2012-09-27 13:42:26 【问题描述】:

我通过 HTTP 将 JSON 发布到 ASP.NET MVC 4 Web 服务。 JSON 被反序列化为一个包含 Nullable 属性(又名“short?”)的对象。当发布的 JSON 将该属性的值用引号括起来时,该值就成功反序列化了。如果没有用引号括起来,则该值始终为空。

正在反序列化的 C# 对象:

Class MyClass 
short? MyLittleNumber  get;set; 

如果 JSON 是这样的:

MyLittleNumber:"5"

它可以工作,但如果是这样的话:

MyLittleNumber:5

读取值失败,默认为NULL。

【问题讨论】:

【参考方案1】:

分辨率: 我将 short(Int16) 更改为 int(Int32),它现在将读取该值,而不管它是否用引号括起来。

昨天我在理解这个区别之前大约 3 个小时与这个问题搏斗了,所以我想在这里找到答案。我相信这是由于 ASP.NET MVC 类将 JSON 反序列化到类中的一些缺陷造成的。

这里有一个关于可空小数/双精度的相关问题。 Passing nullable decimal from json to ASP.NET MVC Controller Action?

【讨论】:

致那些标记你的人——耻辱。这绝对是 ASP.NET MVC 中的一个错误。 感谢您的支持!看到任意的否决票让我感到惊讶和失望。如果它甚至可以帮助一个人,那么值得花时间发布问题和答案。 +1 感谢您的提示,默认模型活页夹当然似乎有一两个问题,这篇文章让我朝着正确的方向前进。对于任何对问题感兴趣的人,我们的 JSON 数据具有未加引号的数字,这些数字在 Decimal 上被错误地反序列化为 NULL?值为 0 时的属性...通过使用我自己的模型绑定器和 ServiceStack JSON 解析器,现在一切正常。 它帮助了我。我自己发现了这个错误并来到这里发布它,然后发现这个答案证实了我的怀疑。

以上是关于将 JSON 发布到 ASP.NET MVC 可空短属性的主要内容,如果未能解决你的问题,请参考以下文章

从 JQuery 将 JSON 发布到 ASP.NET MVC 4 操作

使用防伪令牌将 JSON 模型发布到 ASP.Net MVC3

ASP.NET MVC 下UpdateModel可空未填写的参数为Null,为何不是空字符串

为啥 ASP.Net MVC 模型绑定器将空 JSON 数组绑定到 null?

将 JSON 从视图发送到控制器 ASP.NET MVC 会给出空值

将 JSON 数组绑定到 ASP.NET MVC 3 中的列表的故障模型