Замените ASP. NET Core 3.1 JSON для всей системы реализации. - PullRequest
1 голос
/ 27 марта 2020

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

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

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

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

Вариант использования: Страница бритвы: Json .Serialize Do c

<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 Ответ

2 голосов
/ 27 марта 2020

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

Так что вы можете мигрировать через

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

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

services.AddControllers().AddNewtonsoftJson(options =>
{
    options.SerializerSettings.ContractResolver = new DefaultContractResolver();
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...