Тело Json не может динамически преобразовываться из строки в int после обновления .версия netcore

#json #asp.net-core

Вопрос:

Перед обновлением,.Версия Netcore 2.2, строка в теле http-запроса JSON может быть преобразована в int в объекте, как показано ниже в Json

 
Post: api/ValidateMember
Host: XXXX
Content-Type: application/json

{
  "id": "125324"
}
 

чтобы возразить:

 class RequestWithID
{
  public int id {get;set;}
}
...
[HttpPost("api/ValidateMember")]
public bool ValidateMember(RequestWithID requestWithID)
{
...
}
 

Это может сработать и раньше.

Но после того, как .Обновление версии Netcore до 3.1. с одним и тем же запросом всегда будет ошибка: значение JSON не удалось преобразовать в System.Int32. Как поддерживать динамический синтаксический анализ строки в int in .Netcore 3.1?

Ответ №1:

Объяснение

Начиная с ASP.NET System.Text.Json Сериализатор Core 3.0 используется по умолчанию вместо предыдущего Newtonsoft.Json.

Даже несмотря на то, что Ньютонсофт.Json работает медленнее (ссылка 1 и ссылка 2), чем System.Text.Таким образом, Json имеет гораздо больше функций, что делает его иногда более подходящим выбором, как вы сами испытали.

Решение

Для того, чтобы вернуть Ньютонсофт.Сериализатор Json добавьте Microsoft.AspNetCore.Mvc.NewtonsoftJson ссылку на пакет в свой проект и вызовите AddNewtonsoftJson() свой Startup :

 public void ConfigureServices(IServiceCollection services)
{
    services.AddControllers()
        .AddNewtonsoftJson();
}
 

Кроме того, при добавлении пользовательских преобразователей убедитесь, что вы используете Newtonsoft.Json пространство имен, а System.Text.Json не как оба типа с одинаковыми именами.

Комментарии:

1. Большое спасибо, Пролог! это исправило мою проблему.