diff --git a/Src/Newtonsoft.Json.Tests/Serialization/JsonSerializerTest.cs b/Src/Newtonsoft.Json.Tests/Serialization/JsonSerializerTest.cs index b3fb1982..20a8478d 100644 --- a/Src/Newtonsoft.Json.Tests/Serialization/JsonSerializerTest.cs +++ b/Src/Newtonsoft.Json.Tests/Serialization/JsonSerializerTest.cs @@ -1341,6 +1341,11 @@ namespace Newtonsoft.Json.Tests.Serialization serializer.SerializationBinder = customBinder; Assert.AreEqual(customBinder, serializer.SerializationBinder); +#pragma warning disable CS0618 // Type or member is obsolete + // can still fetch because DefaultSerializationBinder inherits from SerializationBinder + Assert.AreEqual(customBinder, serializer.Binder); +#pragma warning restore CS0618 // Type or member is obsolete + serializer.CheckAdditionalContent = true; Assert.AreEqual(true, serializer.CheckAdditionalContent); @@ -1570,6 +1575,12 @@ namespace Newtonsoft.Json.Tests.Serialization serializerProxy.SerializationBinder = customBinder; Assert.AreEqual(customBinder, serializerProxy.SerializationBinder); +#pragma warning disable CS0618 // Type or member is obsolete + // can still fetch because DefaultSerializationBinder inherits from SerializationBinder + Assert.AreEqual(customBinder, serializerProxy.Binder); +#pragma warning restore CS0618 // Type or member is obsolete + + serializerProxy.CheckAdditionalContent = true; Assert.AreEqual(true, serializerProxy.CheckAdditionalContent); diff --git a/Src/Newtonsoft.Json.Tests/Serialization/TypeNameHandlingTests.cs b/Src/Newtonsoft.Json.Tests/Serialization/TypeNameHandlingTests.cs index b1d4a5b0..fe9db75b 100644 --- a/Src/Newtonsoft.Json.Tests/Serialization/TypeNameHandlingTests.cs +++ b/Src/Newtonsoft.Json.Tests/Serialization/TypeNameHandlingTests.cs @@ -884,7 +884,7 @@ namespace Newtonsoft.Json.Tests.Serialization } } #endif - + [Test] public void NewSerializeUsingCustomBinder() { @@ -1318,7 +1318,6 @@ namespace Newtonsoft.Json.Tests.Serialization #endif #if !(NET20 || NET35) - [Test] public void SerializationBinderWithFullName() { @@ -2125,38 +2124,41 @@ namespace Newtonsoft.Json.Tests.Serialization } #endif - #if !(NET20 || NET35) - [Test] public void SerializerWithDefaultBinder() { var serializer = JsonSerializer.Create(); #pragma warning disable CS0618 Assert.NotNull(serializer.Binder); - StringAssert.Equals(typeof(DefaultSerializationBinder).FullName, serializer.Binder.GetType().FullName); + Assert.IsInstanceOf(typeof(DefaultSerializationBinder), serializer.Binder); #pragma warning restore CS0618 // Type or member is obsolete - StringAssert.Equals(typeof(DefaultSerializationBinder).FullName, serializer.SerializationBinder.GetType().FullName); - } - - [Test] - public void ObsoleteBinderThrowsIfISerializationBinderSet() - { - var serializer = JsonSerializer.Create(new JsonSerializerSettings() { SerializationBinder = new FancyBinder() }); -#pragma warning disable CS0618 - Assert.Throws(() => { var foo = serializer.Binder; }); -#pragma warning restore CS0618 // Type or member is obsolete - StringAssert.Equals(typeof(FancyBinder).Name, serializer.SerializationBinder.GetType().Name); + Assert.IsInstanceOf(typeof(DefaultSerializationBinder), serializer.SerializationBinder); } + [Test] + public void ObsoleteBinderThrowsIfISerializationBinderSet() + { + var serializer = JsonSerializer.Create(new JsonSerializerSettings() { SerializationBinder = new FancyBinder() }); + ExceptionAssert.Throws(() => + { +#pragma warning disable CS0618 // Type or member is obsolete + var serializationBinder = serializer.Binder; +#pragma warning restore CS0618 // Type or member is obsolete + serializationBinder.ToString(); + }, "Cannot get SerializationBinder because an ISerializationBinder was previously set."); + + Assert.IsInstanceOf(typeof(FancyBinder), serializer.SerializationBinder); + } public class FancyBinder : ISerializationBinder { - string annotate = new string(':', 3); + private static readonly string Annotate = new string(':', 3); + public void BindToName(Type serializedType, out string assemblyName, out string typeName) { assemblyName = string.Format("FancyAssemblyName=>{0}", Assembly.GetAssembly(serializedType)?.GetName().Name); - typeName = string.Format("{0}{1}{0}", annotate, serializedType.Name); + typeName = string.Format("{0}{1}{0}", Annotate, serializedType.Name); } public Type BindToType(string assemblyName, string typeName) @@ -2165,7 +2167,6 @@ namespace Newtonsoft.Json.Tests.Serialization } } #endif - } public struct Message2 diff --git a/Src/Newtonsoft.Json/JsonSerializer.cs b/Src/Newtonsoft.Json/JsonSerializer.cs index 696d0443..d87368b6 100644 --- a/Src/Newtonsoft.Json/JsonSerializer.cs +++ b/Src/Newtonsoft.Json/JsonSerializer.cs @@ -111,23 +111,18 @@ namespace Newtonsoft.Json return null; } + SerializationBinder legacySerializationBinder = _serializationBinder as SerializationBinder; + if (legacySerializationBinder != null) + { + return legacySerializationBinder; + } + SerializationBinderAdapter adapter = _serializationBinder as SerializationBinderAdapter; if (adapter != null) { return adapter.SerializationBinder; } - //Check if Default Binder was set - if (_serializationBinder.GetType().IsAssignableFrom(typeof(DefaultSerializationBinder))) - { - adapter = new SerializationBinderAdapter(_serializationBinder as DefaultSerializationBinder); - } - - if (adapter != null) - { - return adapter.SerializationBinder; - } - throw new InvalidOperationException("Cannot get SerializationBinder because an ISerializationBinder was previously set."); } set