From 56e45bbbab8178efb896dba7127296b50299c30a Mon Sep 17 00:00:00 2001 From: James Newton-King Date: Sun, 22 Jun 2014 19:53:01 +1200 Subject: [PATCH] -Test --- .../Serialization/JsonSerializerTest.cs | 89 ++++++++++++++++--- .../Serialization/DefaultContractResolver.cs | 2 +- .../Serialization/DynamicValueProvider.cs | 1 - 3 files changed, 79 insertions(+), 13 deletions(-) diff --git a/Src/Newtonsoft.Json.Tests/Serialization/JsonSerializerTest.cs b/Src/Newtonsoft.Json.Tests/Serialization/JsonSerializerTest.cs index f9aa727f..5191a190 100644 --- a/Src/Newtonsoft.Json.Tests/Serialization/JsonSerializerTest.cs +++ b/Src/Newtonsoft.Json.Tests/Serialization/JsonSerializerTest.cs @@ -5806,27 +5806,86 @@ To fix this error either change the environment to be fully trusted, change the } } - [Test] - public void SerializeStaticField() + public class ReflectionContractResolver : DefaultContractResolver { - StaticFieldTestClass c = new StaticFieldTestClass + protected override IValueProvider CreateMemberValueProvider(MemberInfo member) + { + return new ReflectionValueProvider(member); + } + } + + [Test] + public void SerializeStaticDefault() + { + DefaultContractResolver contractResolver = new DefaultContractResolver(); + + StaticTestClass c = new StaticTestClass { x = int.MaxValue }; - string json = JsonConvert.SerializeObject(c, Formatting.Indented); - + StaticTestClass.y = 2; + StaticTestClass.z = 3; + string json = JsonConvert.SerializeObject(c, Formatting.Indented, new JsonSerializerSettings + { + ContractResolver = contractResolver + }); + Assert.AreEqual(@"{ ""x"": 2147483647, - ""y"": 2 + ""y"": 2, + ""z"": 3 }", json); - StaticFieldTestClass c2 = JsonConvert.DeserializeObject(@"{ + StaticTestClass c2 = JsonConvert.DeserializeObject(@"{ ""x"": -1, - ""y"": -2 -}"); + ""y"": -2, + ""z"": -3 +}", + new JsonSerializerSettings + { + ContractResolver = contractResolver + }); Assert.AreEqual(-1, c2.x); - Assert.AreEqual(-2, StaticFieldTestClass.y); + Assert.AreEqual(-2, StaticTestClass.y); + Assert.AreEqual(-3, StaticTestClass.z); + } + + [Test] + public void SerializeStaticReflection() + { + ReflectionContractResolver contractResolver = new ReflectionContractResolver(); + + StaticTestClass c = new StaticTestClass + { + x = int.MaxValue + }; + StaticTestClass.y = 2; + StaticTestClass.z = 3; + string json = JsonConvert.SerializeObject(c, Formatting.Indented, new JsonSerializerSettings + { + ContractResolver = contractResolver + }); + + Assert.AreEqual(@"{ + ""x"": 2147483647, + ""y"": 2, + ""z"": 3 +}", json); + + StaticTestClass c2 = JsonConvert.DeserializeObject(@"{ + ""x"": -1, + ""y"": -2, + ""z"": -3 +}", + new JsonSerializerSettings + { + ContractResolver = contractResolver + }); + + Assert.AreEqual(-1, c2.x); + Assert.AreEqual(-2, StaticTestClass.y); + Assert.AreEqual(-3, StaticTestClass.z); } #if !(NET20 || NETFX_CORE) @@ -8151,12 +8210,20 @@ Parameter name: value", } [JsonObject(MemberSerialization.OptIn)] - public class StaticFieldTestClass + public class StaticTestClass { [JsonProperty] public int x = 1; [JsonProperty] public static int y = 2; + + [JsonProperty] + public static int z { get; set; } + + static StaticTestClass() + { + z = 3; + } } } \ No newline at end of file diff --git a/Src/Newtonsoft.Json/Serialization/DefaultContractResolver.cs b/Src/Newtonsoft.Json/Serialization/DefaultContractResolver.cs index 775d9d67..2b03edd1 100644 --- a/Src/Newtonsoft.Json/Serialization/DefaultContractResolver.cs +++ b/Src/Newtonsoft.Json/Serialization/DefaultContractResolver.cs @@ -1134,7 +1134,7 @@ namespace Newtonsoft.Json.Serialization else valueProvider = new ReflectionValueProvider(member); #elif !(PORTABLE40) - valueProvider = new ExpressionValueProvider(member); + valueProvider = new ExpressionValueProvider(member); #else valueProvider = new ReflectionValueProvider(member); #endif diff --git a/Src/Newtonsoft.Json/Serialization/DynamicValueProvider.cs b/Src/Newtonsoft.Json/Serialization/DynamicValueProvider.cs index 1be7e930..5c758aeb 100644 --- a/Src/Newtonsoft.Json/Serialization/DynamicValueProvider.cs +++ b/Src/Newtonsoft.Json/Serialization/DynamicValueProvider.cs @@ -110,5 +110,4 @@ namespace Newtonsoft.Json.Serialization } } } - #endif \ No newline at end of file