diff --git a/Src/Newtonsoft.Json.Tests/Converters/XmlNodeConverterTest.cs b/Src/Newtonsoft.Json.Tests/Converters/XmlNodeConverterTest.cs index 4d0936ec..3d092474 100644 --- a/Src/Newtonsoft.Json.Tests/Converters/XmlNodeConverterTest.cs +++ b/Src/Newtonsoft.Json.Tests/Converters/XmlNodeConverterTest.cs @@ -977,6 +977,23 @@ namespace Newtonsoft.Json.Tests.Converters return sw.ToString(); } + public class Foo2 + { + public XmlElement Bar { get; set; } + } + + [Test] + public void SerializeAndDeserializeXmlElement() + { + Foo2 foo = new Foo2 { Bar = null }; + string json = JsonConvert.SerializeObject(foo); + + Assert.AreEqual(@"{""Bar"":null}", json); + Foo2 foo2 = JsonConvert.DeserializeObject(json); + + Assert.IsNull(foo2.Bar); + } + [Test] public void SingleTextNode() { diff --git a/Src/Newtonsoft.Json/Converters/XmlNodeConverter.cs b/Src/Newtonsoft.Json/Converters/XmlNodeConverter.cs index 1edee00b..304709ad 100644 --- a/Src/Newtonsoft.Json/Converters/XmlNodeConverter.cs +++ b/Src/Newtonsoft.Json/Converters/XmlNodeConverter.cs @@ -1645,9 +1645,10 @@ namespace Newtonsoft.Json.Converters if (typeof(XmlNode).IsAssignableFrom(objectType)) { if (objectType != typeof(XmlDocument) + && objectType != typeof(XmlElement) && objectType != typeof(XmlNode)) { - throw JsonSerializationException.Create(reader, "XmlNodeConverter only supports deserializing XmlDocuments"); + throw JsonSerializationException.Create(reader, "XmlNodeConverter only supports deserializing XmlDocument or XmlElement."); } XmlDocument d = new XmlDocument(); @@ -1685,6 +1686,12 @@ namespace Newtonsoft.Json.Converters return element; } #endif +#if HAVE_XML_DOCUMENT + if (objectType == typeof(XmlElement)) + { + return document.DocumentElement.WrappedNode; + } +#endif return document.WrappedNode; }