diff --git a/Src/Newtonsoft.Json.Tests/Serialization/JsonSerializerTest.cs b/Src/Newtonsoft.Json.Tests/Serialization/JsonSerializerTest.cs index 20a8478d..35a00c5b 100644 --- a/Src/Newtonsoft.Json.Tests/Serialization/JsonSerializerTest.cs +++ b/Src/Newtonsoft.Json.Tests/Serialization/JsonSerializerTest.cs @@ -1336,7 +1336,7 @@ namespace Newtonsoft.Json.Tests.Serialization Assert.AreEqual(customBinder, serializer.Binder); #pragma warning restore CS0618 // Type or member is obsolete - Assert.IsInstanceOf(typeof(SerializationBinderAdapter), serializer.SerializationBinder); + Assert.IsInstanceOf(typeof(DefaultSerializationBinder), serializer.SerializationBinder); serializer.SerializationBinder = customBinder; Assert.AreEqual(customBinder, serializer.SerializationBinder); @@ -1570,7 +1570,7 @@ namespace Newtonsoft.Json.Tests.Serialization Assert.AreEqual(customBinder, serializerProxy.Binder); #pragma warning restore CS0618 // Type or member is obsolete - Assert.IsInstanceOf(typeof(SerializationBinderAdapter), serializerProxy.SerializationBinder); + Assert.IsInstanceOf(typeof(DefaultSerializationBinder), serializerProxy.SerializationBinder); serializerProxy.SerializationBinder = customBinder; Assert.AreEqual(customBinder, serializerProxy.SerializationBinder); diff --git a/Src/Newtonsoft.Json.Tests/Serialization/TypeNameHandlingTests.cs b/Src/Newtonsoft.Json.Tests/Serialization/TypeNameHandlingTests.cs index fe9db75b..f06fda57 100644 --- a/Src/Newtonsoft.Json.Tests/Serialization/TypeNameHandlingTests.cs +++ b/Src/Newtonsoft.Json.Tests/Serialization/TypeNameHandlingTests.cs @@ -2151,6 +2151,21 @@ namespace Newtonsoft.Json.Tests.Serialization Assert.IsInstanceOf(typeof(FancyBinder), serializer.SerializationBinder); } + [Test] + public void SetOldBinderAndSerializationBinderReturnsWrapper() + { + var serializer = JsonSerializer.Create(new JsonSerializerSettings() { Binder = new OldBinder() }); + +#pragma warning disable CS0618 // Type or member is obsolete + Assert.IsInstanceOf(typeof(OldBinder), serializer.Binder); +#pragma warning restore CS0618 // Type or member is obsolete + + var binder = serializer.SerializationBinder; + + Assert.IsInstanceOf(typeof(SerializationBinderAdapter), binder); + Assert.AreEqual(typeof(string), binder.BindToType(null, null)); + } + public class FancyBinder : ISerializationBinder { private static readonly string Annotate = new string(':', 3); @@ -2166,6 +2181,14 @@ namespace Newtonsoft.Json.Tests.Serialization return null; } } + + public class OldBinder : SerializationBinder + { + public override Type BindToType(string assemblyName, string typeName) + { + return typeof(string); + } + } #endif } diff --git a/Src/Newtonsoft.Json/JsonSerializer.cs b/Src/Newtonsoft.Json/JsonSerializer.cs index d87368b6..caf171d0 100644 --- a/Src/Newtonsoft.Json/JsonSerializer.cs +++ b/Src/Newtonsoft.Json/JsonSerializer.cs @@ -111,8 +111,7 @@ namespace Newtonsoft.Json return null; } - SerializationBinder legacySerializationBinder = _serializationBinder as SerializationBinder; - if (legacySerializationBinder != null) + if (_serializationBinder is SerializationBinder legacySerializationBinder) { return legacySerializationBinder; } @@ -132,7 +131,7 @@ namespace Newtonsoft.Json throw new ArgumentNullException(nameof(value), "Serialization binder cannot be null."); } - _serializationBinder = new SerializationBinderAdapter(value); + _serializationBinder = value as ISerializationBinder ?? new SerializationBinderAdapter(value); } }