#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. Большое спасибо, Пролог! это исправило мою проблему.