Публикация JSON в коротком свойстве ASP.NET MVC, допускающем значение Nullable

Я HTTP отправляю JSON в веб-службу ASP.NET MVC 4. JSON десериализуется в объект, который включает свойство Nullable‹Int16› (также известное как «короткий?»). Когда опубликованный JSON заключает значение этого свойства в кавычки, это значение успешно десериализуется. Если оно не заключено в кавычки, значение всегда равно null.

Десериализуемый объект С#:

Class MyClass {
short? MyLittleNumber { get;set; }
}

А если JSON такой:

{MyLittleNumber:"5"}

это работает, но если это:

{MyLittleNumber:5}

Он не может прочитать значение и по умолчанию имеет значение NULL.


person brentlightsey    schedule 27.09.2012    source источник


Ответы (1)


Решение: я изменил short(Int16) на int(Int32), и теперь он будет считывать значение независимо от того, заключено ли оно в кавычки.

Вчера я боролся с этой проблемой около 3 часов, прежде чем понял это различие, поэтому я хотел опубликовать ответ здесь, где его можно найти. Я считаю, что это вызвано некоторым недостатком в том, как классы ASP.NET MVC десериализуют JSON в класс.

Связанный с этим вопрос касается десятичных/двойных чисел, допускающих значение NULL. Передача десятичного числа с нулевым значением из json в ASP.NET MVC Действие контроллера?

person brentlightsey    schedule 27.09.2012
comment
тому, кто поставил вам минус - позор. Это определенно ошибка в ASP.NET MVC. - person Milimetric; 01.10.2012
comment
Спасибо за голоса! Я был удивлен и разочарован, увидев произвольные отрицательные голоса. Если это поможет хотя бы одному человеку, стоит потратить время на публикацию вопросов и ответов. - person brentlightsey; 01.10.2012
comment
+1 спасибо за совет, у связывателя модели по умолчанию определенно есть проблема или две, и этот пост направил меня в правильном направлении. Для всех, кто интересуется проблемой, у нас есть данные JSON с числами без кавычек, которые неправильно десериализуются в NULL на Decimal? properties, когда значение было равно 0... с помощью моего собственного связывателя модели и синтаксического анализатора ServiceStack JSON теперь все работает отлично. - person Paul Carroll; 20.01.2013
comment
Мне это помогло. Я сам обнаружил эту ошибку и пришел сюда, чтобы написать об этом, а затем нашел этот ответ, подтверждающий мое подозрение. - person Graham Charles; 14.08.2013