-Refactor JsonSerializer.Binder to not create wrapper when unneeded
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user