#c# #asp.net-core #.net-core #json.net #asp.net-core-2.1
#c# #asp.net-core #.net-ядро #json.net #asp.net-core-2.1
Вопрос:
Для моего конкретного приложения .NET Core 2.1 я провел сравнительный анализ этого System.Text.Json работает намного лучше, чем Newtonsoft. Я знаю, что это значение по умолчанию в .NET Core 3.x, но я пока не могу перейти на него.
В отдельных конечных точках я могу сериализовать с помощью System.Text.Json без проблем
System.Text.Json.JsonSerializer.Serialize(data, options);
Но мне не ясно, как бы я сделал это по умолчанию для всего приложения. Если бы я должен был настроить JsonOptions в Startup.cs
, SerializerSettings
объект является частью Newtonsoft.
.AddJsonOptions(options =>
{
options.SerializerSettings...
});
Есть ли способ изменить сериализатор Json по умолчанию для приложения .NET Core 2.1?
Комментарии:
1. Я полагаю, вы могли бы создать пользовательский форматировщик для
System.Text.Json
в ASP.NET Ядро 2.1, см. learn.microsoft.com/en-us/aspnet/core/web-api/advanced /… . Исходный код дляJsonOutputFormatter
в asp.net Здесь есть пункт 2.1, так что вы могли бы использовать его в качестве модели.
Ответ №1:
Похоже, вы можете попробовать использовать пользовательскую реализацию форматеров ввода / вывода.
Есть пример использования protobuf для обработки сериализации. https://dejanstojanovic.net/aspnet/2018/september/custom-input-and-output-serializers-in-aspnet-core/
Я думаю, вам будет больше всего интересно ознакомиться с официальной документацией MSDN здесь:
https://learn.microsoft.com/en-us/aspnet/core/web-api/advanced/custom-formatters?view=aspnetcore-2.1
public class JsonInputFormatter : TextInputFormatter, IInputFormatterExceptionPolicy
{
public InputFormatterExceptionPolicy ExceptionPolicy { get; }
public JsonInputFormatter()
{
SupportedMediaTypes.Add(MediaTypeHeaderValue.Parse("application/json"));
SupportedEncodings.Add(Encoding.UTF8);
SupportedEncodings.Add(Encoding.Unicode);
}
public override async Task<InputFormatterResult> ReadRequestBodyAsync(InputFormatterContext context, Encoding encoding)
{
string request = null;
using(var sr = new StreamReader(context.HttpContext.Request.Body))
{
request = await sr.ReadToEndAsync();
}
var result = JsonSerializer.Deserialize(request, context.ModelType);
return await InputFormatterResult.SuccessAsync(result);
}
}
Комментарии:
1. Действительно, никаких проблем с установкой пакета. Проблема в том, как я бы использовал это в качестве сериализатора Json по умолчанию в ASP.NET Приложение ядра 2.1. Как изменить Startup.cs, чтобы начать использовать это, а не Newtonsoft
2. Упс, пропустил эту часть. Я думал, ваш вопрос в том, как использовать System.Text. Json в 2.1 … я скоро обновлю свой ответ.