diff --git a/Src/Newtonsoft.Json.Tests/JsonConvertTest.cs b/Src/Newtonsoft.Json.Tests/JsonConvertTest.cs index 6c6a1a05..1244b05f 100644 --- a/Src/Newtonsoft.Json.Tests/JsonConvertTest.cs +++ b/Src/Newtonsoft.Json.Tests/JsonConvertTest.cs @@ -1399,5 +1399,16 @@ namespace Newtonsoft.Json.Tests writer.WriteValue(Math.Round((double)value, _precision, _rounding)); } } + + [Test] + public void GenericBaseClassSerialization() + { + string json = JsonConvert.SerializeObject (new NonGenericChildClass ()); + Assert.AreEqual ("{\"Data\":null}", json); + } + + public class GenericBaseClass { public virtual T Data { get; set; } } + public class GenericIntermediateClass : GenericBaseClass { public override string Data { get; set; } } + public class NonGenericChildClass : GenericIntermediateClass { } } } \ No newline at end of file diff --git a/Src/Newtonsoft.Json/Utilities/ReflectionUtils.cs b/Src/Newtonsoft.Json/Utilities/ReflectionUtils.cs index cf22842a..89ed5bd6 100644 --- a/Src/Newtonsoft.Json/Utilities/ReflectionUtils.cs +++ b/Src/Newtonsoft.Json/Utilities/ReflectionUtils.cs @@ -967,7 +967,7 @@ namespace Newtonsoft.Json.Utilities int index = initialProperties.IndexOf(p => p.Name == subTypeProperty.Name && p.IsVirtual() && p.GetBaseDefinition() != null - && p.GetBaseDefinition().DeclaringType.IsAssignableFrom(subTypeProperty.DeclaringType)); + && p.GetBaseDefinition().DeclaringType.IsAssignableFrom(subTypeProperty.GetBaseDefinition().DeclaringType)); if (index == -1) initialProperties.Add(subTypeProperty);