Если это помогает, ASP.NET Core в некоторых местах абстрагирует сам сериализатор JSON.Например, в представлениях Razor (как в представлениях, так и на страницах) вы можете использовать Json.Serialize()
для сериализации содержимого в теле.При этом используется IJsonHelper
для предоставления абстрактного доступа к сериализации при использовании всех предварительно сконфигурированных настроек из сериализатора (обеспечение согласованного вывода).
В 2.2 основнойJsonHelper
использует JsonOutputFormatter
для фактического предоставления доступа к сериализатору.И IJsonHelper
, и JsonOutputFormatter
доступны посредством внедрения зависимостей, так что вы можете внедрять их в любом месте, если они вам нужны.
В версии 3.0 команда удаляет прямую зависимость от Newtonsoft.Json и представляетправильная абстракция себя.IJsonHelper
все еще здесь.По умолчанию, Newtonsoft.Json не будет присутствовать, поэтому, если вы зависите от этого (например, потому что используете его статически), вам придется добавить зависимость самостоятельно (и, возможно, переключить ASP.NET Core обратно, чтобы использовать ее тоже).
Когда вы хотите десериализоваться, IJsonHelper
вам не поможет, и вокруг нет компонента, который предоставил бы вам прямой доступ к десериализатору.В этих случаях вы всегда можете создать JsonSerializer
самостоятельно.Вы можете получить настройки сериализатора из DI:
IOptions<MvcJsonOptions> mvcJsonOptions // get through DI
var serializer = JsonSerializer.Create(mvcJsonOptions.Options.SerializerSettings);
, который использует глобально сконфигурированные параметры сериализации из каркаса.
Обычно, просто использование статического JsonConvert
тоже подойдет.В общем, вы должны попытаться избежать сериализации и десериализации материала самостоятельно.Фреймворк уже позаботится об этом для вас в различных местах, где данные входят или выходят.Поэтому, в зависимости от вашего варианта использования, может уже существовать автоматическое преобразование между JSON.