-Changed ISerializable serialization to require SerializableAttribute
This commit is contained in:
@@ -125,6 +125,15 @@ namespace Newtonsoft.Json.Tests.Serialization
|
||||
Assert.AreEqual(JsonContractType.Serializable, contract.ContractType);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void ResolveSerializableWithoutAttributeContract()
|
||||
{
|
||||
DefaultContractResolver contractResolver = new DefaultContractResolver();
|
||||
JsonContract contract = contractResolver.ResolveContract(typeof(ISerializableWithoutAttributeTestObject));
|
||||
|
||||
Assert.AreEqual(JsonContractType.Object, contract.ContractType);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void ResolveObjectContractWithFieldsSerialization()
|
||||
{
|
||||
|
||||
@@ -152,6 +152,7 @@ namespace Newtonsoft.Json.Tests.Serialization
|
||||
}
|
||||
|
||||
#if !(PORTABLE || DNXCORE50 || PORTABLE40) || NETSTANDARD1_3 || NETSTANDARD2_0
|
||||
[Serializable]
|
||||
public class MainClass : ISerializable
|
||||
{
|
||||
public ChildClass Child { get; set; }
|
||||
@@ -162,6 +163,7 @@ namespace Newtonsoft.Json.Tests.Serialization
|
||||
}
|
||||
}
|
||||
|
||||
[Serializable]
|
||||
public class ChildClass : ISerializable
|
||||
{
|
||||
public string Name { get; set; }
|
||||
|
||||
@@ -29,6 +29,7 @@ using Newtonsoft.Json.Tests.TestObjects.Organization;
|
||||
|
||||
namespace Newtonsoft.Json.Tests.TestObjects
|
||||
{
|
||||
[Serializable]
|
||||
public class ISerializableTestObject : ISerializable
|
||||
{
|
||||
internal string _stringValue;
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
using System;
|
||||
using System.Runtime.Serialization;
|
||||
|
||||
namespace Newtonsoft.Json.Tests.TestObjects
|
||||
{
|
||||
public class ISerializableWithoutAttributeTestObject : ISerializable
|
||||
{
|
||||
public void GetObjectData(SerializationInfo info, StreamingContext context)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -23,11 +23,13 @@
|
||||
// OTHER DEALINGS IN THE SOFTWARE.
|
||||
#endregion
|
||||
|
||||
using System;
|
||||
using System.Runtime.Serialization;
|
||||
|
||||
namespace Newtonsoft.Json.Tests.TestObjects
|
||||
{
|
||||
#if !(PORTABLE || PORTABLE40 || DNXCORE50) || NETSTANDARD1_3 || NETSTANDARD2_0
|
||||
[Serializable]
|
||||
public class PreserveReferencesCallbackTestObject : ISerializable
|
||||
{
|
||||
internal string _stringValue;
|
||||
|
||||
@@ -30,6 +30,7 @@ using System.Runtime.Serialization;
|
||||
namespace Newtonsoft.Json.Tests.TestObjects
|
||||
{
|
||||
#if !(DNXCORE50) || NETSTANDARD1_3 || NETSTANDARD2_0
|
||||
[Serializable]
|
||||
public struct Ratio : IConvertible, IFormattable, ISerializable
|
||||
{
|
||||
private readonly int _numerator;
|
||||
|
||||
@@ -1171,7 +1171,7 @@ namespace Newtonsoft.Json.Serialization
|
||||
}
|
||||
|
||||
#if HAVE_BINARY_SERIALIZATION
|
||||
if (!IgnoreSerializableInterface && typeof(ISerializable).IsAssignableFrom(t))
|
||||
if (!IgnoreSerializableInterface && typeof(ISerializable).IsAssignableFrom(t) && JsonTypeReflector.IsSerializable(t))
|
||||
{
|
||||
return CreateISerializableContract(objectType);
|
||||
}
|
||||
|
||||
@@ -383,7 +383,8 @@ namespace Newtonsoft.Json.Serialization
|
||||
public static bool IsNonSerializable(object provider)
|
||||
{
|
||||
#if HAVE_FULL_REFLECTION
|
||||
return (GetCachedAttribute<NonSerializedAttribute>(provider) != null);
|
||||
// no inheritance
|
||||
return (ReflectionUtils.GetAttribute<NonSerializedAttribute>(provider, false) != null);
|
||||
#else
|
||||
FieldInfo fieldInfo = provider as FieldInfo;
|
||||
if (fieldInfo != null && (fieldInfo.Attributes & FieldAttributes.NotSerialized) == FieldAttributes.NotSerialized)
|
||||
@@ -400,7 +401,8 @@ namespace Newtonsoft.Json.Serialization
|
||||
public static bool IsSerializable(object provider)
|
||||
{
|
||||
#if HAVE_FULL_REFLECTION
|
||||
return (GetCachedAttribute<SerializableAttribute>(provider) != null);
|
||||
// no inheritance
|
||||
return (ReflectionUtils.GetAttribute<SerializableAttribute>(provider, false) != null);
|
||||
#else
|
||||
Type type = provider as Type;
|
||||
if (type != null && (type.GetTypeInfo().Attributes & TypeAttributes.Serializable) == TypeAttributes.Serializable)
|
||||
|
||||
Reference in New Issue
Block a user