JsonInputFormatter fails to use custom SerializerSettings

Fixes #4270
This commit is contained in:
Pranav K 2016-04-04 22:07:23 -07:00
parent 29646153ea
commit 7cb1dca467
2 changed files with 32 additions and 3 deletions

View File

@ -212,7 +212,7 @@ namespace Microsoft.AspNetCore.Mvc.Formatters
{
if (_jsonSerializerPool == null)
{
_jsonSerializerPool = _objectPoolProvider.Create<JsonSerializer>();
_jsonSerializerPool = _objectPoolProvider.Create(new JsonSerializerObjectPolicy(SerializerSettings));
}
return _jsonSerializerPool.Get();

View File

@ -9,7 +9,6 @@ using System.Text;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc.ModelBinding;
using Microsoft.AspNetCore.Mvc.ModelBinding.Metadata;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Testing;
using Moq;
@ -21,7 +20,6 @@ namespace Microsoft.AspNetCore.Mvc.Formatters
{
public class JsonInputFormatterTest
{
[Theory]
[InlineData("application/json", true)]
[InlineData("application/*", false)]
@ -358,6 +356,37 @@ namespace Microsoft.AspNetCore.Mvc.Formatters
Assert.Contains("Required property 'Password' not found in JSON", modelErrorMessage);
}
[Fact]
public void CreateJsonSerializer_UsesJsonSerializerSettings()
{
// Arrange
var settings = new JsonSerializerSettings
{
ContractResolver = Mock.Of<IContractResolver>(),
MaxDepth = 2,
DateTimeZoneHandling = DateTimeZoneHandling.RoundtripKind,
};
var formatter = new TestableJsonInputFormatter(GetLogger(), settings);
// Act
var actual = formatter.CreateJsonSerializer();
// Assert
Assert.Same(settings.ContractResolver, actual.ContractResolver);
Assert.Equal(settings.MaxDepth, actual.MaxDepth);
Assert.Equal(settings.DateTimeZoneHandling, actual.DateTimeZoneHandling);
}
private class TestableJsonInputFormatter : JsonInputFormatter
{
public TestableJsonInputFormatter(ILogger logger, JsonSerializerSettings settings)
: base(logger, settings)
{
}
public new JsonSerializer CreateJsonSerializer() => base.CreateJsonSerializer();
}
private static ILogger GetLogger()
{
return NullLogger.Instance;