-Fixed WinRT build
This commit is contained in:
@@ -281,6 +281,7 @@
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="Utilities\DateTimeUtilsTests.cs" />
|
||||
<Compile Include="Utilities\DynamicReflectionDelegateFactoryTests.cs" />
|
||||
<Compile Include="Utilities\ExpressionReflectionDelegateFactoryTests.cs" />
|
||||
<Compile Include="Utilities\ReflectionUtilsTests.cs" />
|
||||
<Compile Include="Utilities\StringUtilsTests.cs" />
|
||||
</ItemGroup>
|
||||
|
||||
@@ -75,4 +75,4 @@ using System.Security;
|
||||
// You can specify all the values or you can default the Revision and Build Numbers
|
||||
// by using the '*' as shown below:
|
||||
[assembly: AssemblyVersion("4.5.0.0")]
|
||||
[assembly: AssemblyFileVersion("5.0.4.16024")]
|
||||
[assembly: AssemblyFileVersion("5.0.4.16025")]
|
||||
|
||||
@@ -36,5 +36,20 @@ namespace Newtonsoft.Json.Tests.TestObjects
|
||||
public string Studio { get; set; }
|
||||
public DateTime? ReleaseDate { get; set; }
|
||||
public List<string> ReleaseCountries { get; set; }
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
return base.ToString();
|
||||
}
|
||||
|
||||
public override bool Equals(object obj)
|
||||
{
|
||||
return base.Equals(obj);
|
||||
}
|
||||
|
||||
public override int GetHashCode()
|
||||
{
|
||||
return base.GetHashCode();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -65,7 +65,7 @@ namespace Newtonsoft.Json.Tests.Utilities
|
||||
[Test]
|
||||
public void DefaultConstructor_Abstract()
|
||||
{
|
||||
ExceptionAssert.Throws<MissingMethodException>("Cannot create an abstract class.",
|
||||
ExceptionAssert.Throws<Exception>("Cannot create an abstract class.",
|
||||
() =>
|
||||
{
|
||||
Func<object> create = ExpressionReflectionDelegateFactory.Instance.CreateDefaultConstructor<object>(typeof(Type));
|
||||
|
||||
@@ -221,6 +221,7 @@
|
||||
<Compile Include="Serialization\DynamicValueProvider.cs" />
|
||||
<Compile Include="Serialization\ErrorContext.cs" />
|
||||
<Compile Include="Serialization\ErrorEventArgs.cs" />
|
||||
<Compile Include="Serialization\ExpressionValueProvider.cs" />
|
||||
<Compile Include="Serialization\IContractResolver.cs" />
|
||||
<Compile Include="Serialization\IReferenceResolver.cs" />
|
||||
<Compile Include="Serialization\ITraceWriter.cs" />
|
||||
@@ -269,6 +270,7 @@
|
||||
<Compile Include="Utilities\EnumUtils.cs" />
|
||||
<Compile Include="Utilities\EnumValue.cs" />
|
||||
<Compile Include="Utilities\EnumValues.cs" />
|
||||
<Compile Include="Utilities\ExpressionReflectionDelegateFactory.cs" />
|
||||
<Compile Include="Utilities\ILGeneratorExtensions.cs" />
|
||||
<Compile Include="Utilities\JavaScriptUtils.cs" />
|
||||
<Compile Include="Utilities\LateBoundReflectionDelegateFactory.cs" />
|
||||
|
||||
@@ -92,6 +92,6 @@ using System.Security;
|
||||
// You can specify all the values or you can default the Revision and Build Numbers
|
||||
// by using the '*' as shown below:
|
||||
[assembly: AssemblyVersion("4.5.0.0")]
|
||||
[assembly: AssemblyFileVersion("5.0.4.16024")]
|
||||
[assembly: AssemblyFileVersion("5.0.4.16025")]
|
||||
|
||||
[assembly: CLSCompliant(true)]
|
||||
|
||||
@@ -362,13 +362,8 @@ namespace Newtonsoft.Json.Serialization
|
||||
if (ReadSpecialProperties(reader, ref objectType, ref contract, member, containerContract, containerMember, existingValue, out newValue, out id))
|
||||
return newValue;
|
||||
|
||||
if (contract == null || objectType == typeof(object) || objectType == typeof(IDynamicMetaObjectProvider))
|
||||
{
|
||||
if (!HasDefinedType(objectType))
|
||||
return CreateJObject(reader);
|
||||
|
||||
throw JsonSerializationException.Create(reader, "Could not resolve type '{0}' to a JsonContract.".FormatWith(CultureInfo.InvariantCulture, objectType));
|
||||
}
|
||||
if (HasNoDefinedType(contract))
|
||||
return CreateJObject(reader);
|
||||
|
||||
switch (contract.ContractType)
|
||||
{
|
||||
@@ -609,72 +604,69 @@ To fix this error either change the JSON to a {1} or change the deserialized typ
|
||||
private object CreateList(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, object existingValue, string id)
|
||||
{
|
||||
object value;
|
||||
if (HasDefinedType(objectType))
|
||||
|
||||
if (HasNoDefinedType(contract))
|
||||
return CreateJToken(reader, contract);
|
||||
|
||||
JsonArrayContract arrayContract = EnsureArrayContract(reader, objectType, contract);
|
||||
|
||||
if (existingValue == null)
|
||||
{
|
||||
JsonArrayContract arrayContract = EnsureArrayContract(reader, objectType, contract);
|
||||
bool createdFromNonDefaultConstructor;
|
||||
IList list = CreateNewList(reader, arrayContract, out createdFromNonDefaultConstructor);
|
||||
|
||||
if (existingValue == null)
|
||||
{
|
||||
bool createdFromNonDefaultConstructor;
|
||||
IList list = CreateNewList(reader, arrayContract, out createdFromNonDefaultConstructor);
|
||||
if (id != null && createdFromNonDefaultConstructor)
|
||||
throw JsonSerializationException.Create(reader, "Cannot preserve reference to array or readonly list, or list created from a non-default constructor: {0}.".FormatWith(CultureInfo.InvariantCulture, contract.UnderlyingType));
|
||||
|
||||
if (id != null && createdFromNonDefaultConstructor)
|
||||
throw JsonSerializationException.Create(reader, "Cannot preserve reference to array or readonly list, or list created from a non-default constructor: {0}.".FormatWith(CultureInfo.InvariantCulture, contract.UnderlyingType));
|
||||
if (contract.OnSerializingCallbacks.Count > 0 && createdFromNonDefaultConstructor)
|
||||
throw JsonSerializationException.Create(reader, "Cannot call OnSerializing on an array or readonly list, or list created from a non-default constructor: {0}.".FormatWith(CultureInfo.InvariantCulture, contract.UnderlyingType));
|
||||
|
||||
if (contract.OnSerializingCallbacks.Count > 0 && createdFromNonDefaultConstructor)
|
||||
throw JsonSerializationException.Create(reader, "Cannot call OnSerializing on an array or readonly list, or list created from a non-default constructor: {0}.".FormatWith(CultureInfo.InvariantCulture, contract.UnderlyingType));
|
||||
if (contract.OnErrorCallbacks.Count > 0 && createdFromNonDefaultConstructor)
|
||||
throw JsonSerializationException.Create(reader, "Cannot call OnError on an array or readonly list, or list created from a non-default constructor: {0}.".FormatWith(CultureInfo.InvariantCulture, contract.UnderlyingType));
|
||||
|
||||
if (contract.OnErrorCallbacks.Count > 0 && createdFromNonDefaultConstructor)
|
||||
throw JsonSerializationException.Create(reader, "Cannot call OnError on an array or readonly list, or list created from a non-default constructor: {0}.".FormatWith(CultureInfo.InvariantCulture, contract.UnderlyingType));
|
||||
|
||||
if (!arrayContract.IsMultidimensionalArray)
|
||||
PopulateList(list, reader, arrayContract, member, id);
|
||||
else
|
||||
PopulateMultidimensionalArray(list, reader, arrayContract, member, id);
|
||||
|
||||
if (createdFromNonDefaultConstructor)
|
||||
{
|
||||
if (arrayContract.IsMultidimensionalArray)
|
||||
{
|
||||
list = CollectionUtils.ToMultidimensionalArray(list, arrayContract.CollectionItemType, contract.CreatedType.GetArrayRank());
|
||||
}
|
||||
else if (contract.CreatedType.IsArray)
|
||||
{
|
||||
Array a = Array.CreateInstance(arrayContract.CollectionItemType, list.Count);
|
||||
list.CopyTo(a, 0);
|
||||
list = a;
|
||||
}
|
||||
else
|
||||
{
|
||||
// call constructor that takes IEnumerable<T>
|
||||
return arrayContract.ParametrizedConstructor.Invoke(new object[] { list });
|
||||
}
|
||||
}
|
||||
else if (list is IWrappedCollection)
|
||||
{
|
||||
return ((IWrappedCollection)list).UnderlyingCollection;
|
||||
}
|
||||
|
||||
value = list;
|
||||
}
|
||||
if (!arrayContract.IsMultidimensionalArray)
|
||||
PopulateList(list, reader, arrayContract, member, id);
|
||||
else
|
||||
PopulateMultidimensionalArray(list, reader, arrayContract, member, id);
|
||||
|
||||
if (createdFromNonDefaultConstructor)
|
||||
{
|
||||
value = PopulateList((arrayContract.ShouldCreateWrapper) ? arrayContract.CreateWrapper(existingValue) : (IList) existingValue, reader, arrayContract, member, id);
|
||||
if (arrayContract.IsMultidimensionalArray)
|
||||
{
|
||||
list = CollectionUtils.ToMultidimensionalArray(list, arrayContract.CollectionItemType, contract.CreatedType.GetArrayRank());
|
||||
}
|
||||
else if (contract.CreatedType.IsArray)
|
||||
{
|
||||
Array a = Array.CreateInstance(arrayContract.CollectionItemType, list.Count);
|
||||
list.CopyTo(a, 0);
|
||||
list = a;
|
||||
}
|
||||
else
|
||||
{
|
||||
// call constructor that takes IEnumerable<T>
|
||||
return arrayContract.ParametrizedConstructor.Invoke(new object[] { list });
|
||||
}
|
||||
}
|
||||
else if (list is IWrappedCollection)
|
||||
{
|
||||
return ((IWrappedCollection)list).UnderlyingCollection;
|
||||
}
|
||||
|
||||
value = list;
|
||||
}
|
||||
else
|
||||
{
|
||||
value = CreateJToken(reader, contract);
|
||||
value = PopulateList((arrayContract.ShouldCreateWrapper) ? arrayContract.CreateWrapper(existingValue) : (IList) existingValue, reader, arrayContract, member, id);
|
||||
}
|
||||
|
||||
return value;
|
||||
}
|
||||
|
||||
private bool HasDefinedType(Type type)
|
||||
private bool HasNoDefinedType(JsonContract contract)
|
||||
{
|
||||
return (type != null && type != typeof (object) && !typeof (JToken).IsSubclassOf(type)
|
||||
return (contract == null || contract.UnderlyingType == typeof (object) || contract.ContractType == JsonContractType.Linq
|
||||
#if !(NET35 || NET20 || PORTABLE40)
|
||||
&& type != typeof (IDynamicMetaObjectProvider)
|
||||
|| contract.UnderlyingType == typeof(IDynamicMetaObjectProvider)
|
||||
#endif
|
||||
);
|
||||
}
|
||||
@@ -1336,7 +1328,7 @@ To fix this error either change the environment to be fully trusted, change the
|
||||
{
|
||||
IDynamicMetaObjectProvider newObject;
|
||||
|
||||
if (contract.UnderlyingType.IsInterface() || contract.UnderlyingType.IsAbstract())
|
||||
if (!contract.IsInstantiable)
|
||||
throw JsonSerializationException.Create(reader, "Could not create an instance of type {0}. Type is an interface or abstract class and cannot be instantiated.".FormatWith(CultureInfo.InvariantCulture, contract.UnderlyingType));
|
||||
|
||||
if (contract.DefaultCreator != null &&
|
||||
|
||||
@@ -96,16 +96,25 @@ namespace Newtonsoft.Json.Utilities
|
||||
if (type.IsAbstract())
|
||||
return () => (T)Activator.CreateInstance(type);
|
||||
|
||||
Type resultType = typeof(T);
|
||||
try
|
||||
{
|
||||
Type resultType = typeof(T);
|
||||
|
||||
Expression expression = Expression.New(type);
|
||||
Expression expression = Expression.New(type);
|
||||
|
||||
expression = EnsureCastExpression(expression, resultType);
|
||||
expression = EnsureCastExpression(expression, resultType);
|
||||
|
||||
LambdaExpression lambdaExpression = Expression.Lambda(typeof(Func<T>), expression);
|
||||
LambdaExpression lambdaExpression = Expression.Lambda(typeof(Func<T>), expression);
|
||||
|
||||
Func<T> compiled = (Func<T>)lambdaExpression.Compile();
|
||||
return compiled;
|
||||
Func<T> compiled = (Func<T>)lambdaExpression.Compile();
|
||||
return compiled;
|
||||
}
|
||||
catch
|
||||
{
|
||||
// an error can be thrown if constructor is not valid on Win8
|
||||
// will have INVOCATION_FLAGS_NON_W8P_FX_API invocation flag
|
||||
return () => (T)Activator.CreateInstance(type);
|
||||
}
|
||||
}
|
||||
|
||||
public override Func<T, object> CreateGet<T>(PropertyInfo propertyInfo)
|
||||
|
||||
Reference in New Issue
Block a user