diff --git a/Src/Newtonsoft.Json.Tests/Serialization/DependencyInjectionTests.cs b/Src/Newtonsoft.Json.Tests/Serialization/DependencyInjectionTests.cs index 7590a785..44da8965 100644 --- a/Src/Newtonsoft.Json.Tests/Serialization/DependencyInjectionTests.cs +++ b/Src/Newtonsoft.Json.Tests/Serialization/DependencyInjectionTests.cs @@ -47,7 +47,12 @@ using NUnit.Framework; namespace Newtonsoft.Json.Tests.Serialization { - public interface ITaskRepository + public interface IBase + { + DateTime CreatedOn { get; set; } + } + + public interface ITaskRepository : IBase { string ConnectionString { get; set; } } @@ -58,7 +63,12 @@ namespace Newtonsoft.Json.Tests.Serialization string Level { get; set; } } - public class TaskRepository : ITaskRepository + public class Base : IBase + { + public DateTime CreatedOn { get; set; } + } + + public class TaskRepository : Base, ITaskRepository { public string ConnectionString { get; set; } } @@ -202,7 +212,8 @@ namespace Newtonsoft.Json.Tests.Serialization 'Level': 'Debug' }, 'Repository': { - 'ConnectionString': 'server=.' + 'ConnectionString': 'server=.', + 'CreatedOn': '2015-04-01 20:00' }, 'People': [ { @@ -216,13 +227,14 @@ namespace Newtonsoft.Json.Tests.Serialization 'Name': 'Name3!' } }", new JsonSerializerSettings - { - ContractResolver = contractResolver - }); + { + ContractResolver = contractResolver + }); Assert.IsNotNull(o); Assert.IsNotNull(o.Logger); Assert.IsNotNull(o.Repository); + Assert.AreEqual(o.Repository.CreatedOn, DateTime.Parse("2015-04-01 20:00")); Assert.AreEqual(2, count); diff --git a/Src/Newtonsoft.Json.sln.DotSettings b/Src/Newtonsoft.Json.sln.DotSettings index c97ec47f..6a89a056 100644 --- a/Src/Newtonsoft.Json.sln.DotSettings +++ b/Src/Newtonsoft.Json.sln.DotSettings @@ -2,5 +2,4 @@ False True False - True \ No newline at end of file diff --git a/Src/Newtonsoft.Json/Utilities/ReflectionUtils.cs b/Src/Newtonsoft.Json/Utilities/ReflectionUtils.cs index 6fd669fa..e3a3933d 100644 --- a/Src/Newtonsoft.Json/Utilities/ReflectionUtils.cs +++ b/Src/Newtonsoft.Json/Utilities/ReflectionUtils.cs @@ -884,6 +884,16 @@ namespace Newtonsoft.Json.Utilities ValidationUtils.ArgumentNotNull(targetType, "targetType"); List propertyInfos = new List(targetType.GetProperties(bindingAttr)); + + // GetProperties on an interface doesn't return properties from its interfaces + if (targetType.IsInterface()) + { + foreach (Type i in targetType.GetInterfaces()) + { + propertyInfos.AddRange(i.GetProperties(bindingAttr)); + } + } + GetChildPrivateProperties(propertyInfos, targetType, bindingAttr); // a base class private getter/setter will be inaccessable unless the property was gotten from the base class