diff --git a/RestSharp.Tests/NamespacedXmlTests.cs b/RestSharp.Tests/NamespacedXmlTests.cs index cd08ea8e6..83d4ac74e 100644 --- a/RestSharp.Tests/NamespacedXmlTests.cs +++ b/RestSharp.Tests/NamespacedXmlTests.cs @@ -253,7 +253,11 @@ private static string CreateElementsXml() { new XElement(ns + "Since", DateTime.Now.Year - i) )); } - root.Add(friends); + root.Add(friends); + + root.Add(new XElement(ns + "FavoriteBand", + new XElement(ns + "Name", "Goldfinger") + )); doc.Add(root); return doc.ToString(); diff --git a/RestSharp.Tests/SampleClasses/misc.cs b/RestSharp.Tests/SampleClasses/misc.cs index ed5d029e6..0831a8b32 100644 --- a/RestSharp.Tests/SampleClasses/misc.cs +++ b/RestSharp.Tests/SampleClasses/misc.cs @@ -48,6 +48,11 @@ public class PersonForXml public Order Order { get; set; } public Disposition Disposition { get; set; } + public Band FavoriteBand { get; set; } + public class Band + { + public string Name { get; set; } + } } diff --git a/RestSharp.Tests/XmlAttributeDeserializerTests.cs b/RestSharp.Tests/XmlAttributeDeserializerTests.cs index 0cfc0e26b..4dc8e4f0d 100644 --- a/RestSharp.Tests/XmlAttributeDeserializerTests.cs +++ b/RestSharp.Tests/XmlAttributeDeserializerTests.cs @@ -290,7 +290,18 @@ public void Can_Deserialize_Custom_Formatted_Date() Assert.Equal(date, output.StartDate); } + [Fact] + public void Can_Deserialize_Nested_Class() + { + var doc = CreateElementsXml(); + var response = new RestResponse { Content = doc }; + + var d = new XmlAttributeDeserializer(); + var p = d.Deserialize(response); + Assert.NotNull(p.FavoriteBand); + Assert.Equal("Goldfinger",p.FavoriteBand.Name); + } [Fact] public void Can_Deserialize_Elements_On_Default_Root() { @@ -839,6 +850,10 @@ private static string CreateElementsXml() } root.Add(friends); + root.Add(new XElement("FavoriteBand", + new XElement("Name", "Goldfinger") + )); + doc.Add(root); return doc.ToString(); } diff --git a/RestSharp/Deserializers/XmlDeserializer.cs b/RestSharp/Deserializers/XmlDeserializer.cs index 277b4fee6..37196830e 100644 --- a/RestSharp/Deserializers/XmlDeserializer.cs +++ b/RestSharp/Deserializers/XmlDeserializer.cs @@ -96,8 +96,8 @@ protected virtual void Map(object x, XElement root) foreach (var prop in props) { var type = prop.PropertyType; - - if (!type.IsPublic || !prop.CanWrite) + var typeIsPublic = type.IsPublic || type.IsNestedPublic; + if (!typeIsPublic || !prop.CanWrite) continue; var name = prop.Name.AsNamespaced(Namespace);