Замените ASP.NET Core 3.1 JSON всей системы реализации

Недавно я решил перейти с ASP.NET Core 2.2 на ASP.NET Core 3.1 и не предвидел всех критических изменений; почти каждая часть моего приложения сломалась, так как большинство частей полагается на JSON.

Чтобы предотвратить будущие проблемы, связанные с JSON, можно ли создать интерфейс, имитирующий текущую реализацию Json, и переопределить поведение по умолчанию.

Большая часть моего кода опирается на эти два метода:

Json.Serialize() // used in my razor 
Json() // returns an IActionResult

Вариант использования: Страница Razor: Json.Serialize Doc

<script>
   var myModel = @Html.Raw(Json.Serialize(Model))
</script>

Вариант использования: контроллер

public async Task<IActionResult> AjaxGetRoleDetails(int id)
{
        return Json(await GetUserRoles(id));
}

Вот методы, которые мне бы хотелось, когда вышеуказанные методы вызываются соответственно.

JsonConvert.SerializeObject() // override Json.Serialize
Content(JsonConvert.SerializeObject(), new MediaTypeHeaderValue("application/json")) // override Json()

Как можно переопределить реализацию системы , и на данный момент вызвать мою собственную реализацию, а затем легко вернуться к реализации системы, когда ASP.NET остановится на реализации JSON.

Всего 1 ответ


Сериализатором JSON по умолчанию для ASP.NET Core теперь является System.Text.Json

Так что вы можете перейти на его использование.

Или, если вы хотите продолжить использовать Newtonsoft.Json в ASP.NET Core 3.0 и выше, вы можете обновить ваши Startup.ConfigureServices для вызова AddNewtonsoftJson.

Если вам нужны такие вещи, как раньше, например, в ASP.NET Core 2.2, тогда вы можете использовать определитель контрактов по умолчанию. Например

services.AddControllers().AddNewtonsoftJson(options =>
{
    options.SerializerSettings.ContractResolver = new DefaultContractResolver();
});

Есть идеи?

10000