.NET 5.0 MVC возвращает Json выдает ошибку синтаксического анализатора JSON

#json #asp.net-core-mvc

#json #asp.net-core-mvc

Вопрос:

У нас есть приложение, которое мы переносим с .NET Core 2.2 на .NET 5.0. Все работает так, как ожидалось, за исключением одной вещи. Когда мы сталкиваемся с исключением, мы перехватываем его и добавляем в список сообщений об ошибках, которые будут возвращены как JSON. Вот очень упрощенный пример:

 public JsonResult TestingJson()
{
    Response response = new Response();

    try
    {
        throw new TimeoutException();
    }
    catch (Exception ex)
    {
        response.ErrorMessages.Add(new ErrorMessage {
            Exception = ex,
            Text = ex.Message,
            CreatedDate = DateTime.Now
        });
    }

    return Json(response);
}
 

Возвращаемый Json (ответ) выдает мне: «Ошибка синтаксиса: неожиданное завершение ввода JSON». Если я не добавлю «Exception = ex» при создании своего объекта ответа, все работает нормально. Кажется, что он не может преобразовать исключение в JSON. Моя проблема в том, что в ядре 2.2 все работало нормально. Я что-то пропустил в своей миграции? Я знаю, что это неопределенный вопрос, но я надеюсь, что кто-то сталкивался с чем-то подобным и, возможно, знает, чего мне не хватает.

Спасибо

Ответ №1:

asp.net ядро 2.2 используется Newtonsoft.Json по умолчанию.В рамках работы по улучшению ASP.NET Основная общая структура, Newtonsoft.Json (Json.NET ) был удален из ASP.NET Основная общая структура с тех пор, как asp.net ядро 3.0.

Чтобы удовлетворить ваши требования, вам необходимо добавить поддержку NewtonSoft:

1. Установите Microsoft.AspNetCore.Mvc.NewtonsoftJson версию пакета 5.0.0.

2. Обновление при запуске.Настройте службы для вызова AddNewtonsoftJson .

 services.AddControllers()
    .AddNewtonsoftJson();
 

Ссылка:

https://docs.microsoft.com/en-us/aspnet/core/migration/22-to-30?view=aspnetcore-5.0amp;tabs=visual-studio#use-newtonsoftjson-in-an-aspnet-core-30-mvc-project

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

1. Это все, чего мне не хватало. Спасибо, Рена, за вашу помощь!