-Refactor

This commit is contained in:
James Newton-King
2017-06-10 15:36:37 +12:00
parent 43e9bd3bed
commit 64a092ee64
3 changed files with 37 additions and 30 deletions
@@ -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);
@@ -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<InvalidOperationException>(() => { 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<InvalidOperationException>(() =>
{
#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
+6 -11
View File
@@ -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