ASP.Net Core 2.2 allows to set serializer settings using MvcJsonOptions.SerializerSettings
property. The problem is that it affects both input and output. Is there
Finally found this workaround: https://github.com/aspnet/Mvc/issues/4562#issuecomment-226100352
public class CustomSerializerSettingsSetup : IConfigureOptions<MvcOptions>
{
private readonly ILoggerFactory _loggerFactory;
private readonly ArrayPool<char> _charPool;
private readonly ObjectPoolProvider _objectPoolProvider;
public CustomSerializerSettingsSetup(
ILoggerFactory loggerFactory,
ArrayPool<char> charPool,
ObjectPoolProvider objectPoolProvider)
{
_loggerFactory = loggerFactory;
_charPool = charPool;
_objectPoolProvider = objectPoolProvider;
}
public void Configure(MvcOptions options)
{
options.OutputFormatters.RemoveType<JsonOutputFormatter>();
options.InputFormatters.RemoveType<JsonInputFormatter>();
options.InputFormatters.RemoveType<JsonPatchInputFormatter>();
var outputSettings = new JsonSerializerSettings();
options.OutputFormatters.Add(new JsonOutputFormatter(outputSettings, _charPool));
var inputSettings = new JsonSerializerSettings();
var jsonInputLogger = _loggerFactory.CreateLogger<JsonInputFormatter>();
options.InputFormatters.Add(new JsonInputFormatter(
jsonInputLogger,
inputSettings,
_charPool,
_objectPoolProvider));
var jsonInputPatchLogger = _loggerFactory.CreateLogger<JsonPatchInputFormatter>();
options.InputFormatters.Add(new JsonPatchInputFormatter(
jsonInputPatchLogger,
inputSettings,
_charPool,
_objectPoolProvider));
}
}
and
services.TryAddEnumerable(
ServiceDescriptor.Transient<IConfigureOptions<MvcOptions>, CustomSerializerSettingsSetup>());
in service provider configuration
I would use JsonSerializerSettings class from Newtonsoft.Json to define two instances mySerializeSetting
and myDeserializeSettings
.
using Newtonsoft.Json;
using Microsoft.Rest.Serialization;
string requestContent = SafeJsonConvert.SerializeObject(value, mySerializationSettings);
To deserialize:
var result = SafeJsonConvert.DeserializeObject<myclass>(input, myDeserializeSettings);
To see how to set up serialization settings see https://www.newtonsoft.com/json/help/html/SerializationSettings.htm