From 795b9e3a46866e4f3aaf4f60781eed171df1d599 Mon Sep 17 00:00:00 2001 From: Jack Ma Date: Fri, 22 Apr 2016 10:33:08 -0700 Subject: [PATCH 1/3] Adds support of XmlElement as one of the allowed objectType --- Src/Newtonsoft.Json/Converters/XmlNodeConverter.cs | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/Src/Newtonsoft.Json/Converters/XmlNodeConverter.cs b/Src/Newtonsoft.Json/Converters/XmlNodeConverter.cs index 438bb0f1..b1105ec6 100644 --- a/Src/Newtonsoft.Json/Converters/XmlNodeConverter.cs +++ b/Src/Newtonsoft.Json/Converters/XmlNodeConverter.cs @@ -1431,9 +1431,9 @@ namespace Newtonsoft.Json.Converters #if !(DOTNET || PORTABLE) if (typeof(XmlNode).IsAssignableFrom(objectType)) { - if (objectType != typeof(XmlDocument)) + if (objectType != typeof(XmlDocument) && objectType != typeof(XmlElement)) { - throw new JsonSerializationException("XmlNodeConverter only supports deserializing XmlDocuments"); + throw new JsonSerializationException("XmlNodeConverter only supports deserializing XmlDocuments or XmlElement"); } XmlDocument d = new XmlDocument(); @@ -1477,6 +1477,11 @@ namespace Newtonsoft.Json.Converters } #endif + if (objectType == typeof(XmlElement)) + { + return document.DocumentElement.WrappedNode; + } + return document.WrappedNode; } From 096b8f3576bbd85fee696d9671ef7256678d5d44 Mon Sep 17 00:00:00 2001 From: Jack Ma Date: Fri, 22 Apr 2016 11:00:11 -0700 Subject: [PATCH 2/3] Adds test for deserializing XmlElement and a minor change in the exception message --- .../Converters/XmlNodeConverterTest.cs | 17 +++++++++++++++++ .../Converters/XmlNodeConverter.cs | 2 +- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/Src/Newtonsoft.Json.Tests/Converters/XmlNodeConverterTest.cs b/Src/Newtonsoft.Json.Tests/Converters/XmlNodeConverterTest.cs index 15a29bf1..a7107f4b 100644 --- a/Src/Newtonsoft.Json.Tests/Converters/XmlNodeConverterTest.cs +++ b/Src/Newtonsoft.Json.Tests/Converters/XmlNodeConverterTest.cs @@ -906,6 +906,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 b1105ec6..ebd25be6 100644 --- a/Src/Newtonsoft.Json/Converters/XmlNodeConverter.cs +++ b/Src/Newtonsoft.Json/Converters/XmlNodeConverter.cs @@ -1433,7 +1433,7 @@ namespace Newtonsoft.Json.Converters { if (objectType != typeof(XmlDocument) && objectType != typeof(XmlElement)) { - throw new JsonSerializationException("XmlNodeConverter only supports deserializing XmlDocuments or XmlElement"); + throw new JsonSerializationException("XmlNodeConverter only supports deserializing XmlDocument or XmlElement"); } XmlDocument d = new XmlDocument(); From dbb0e0932c2086266b63780744f4848e6bc0c8ea Mon Sep 17 00:00:00 2001 From: Jack Ma Date: Fri, 22 Apr 2016 12:48:01 -0700 Subject: [PATCH 3/3] Adds missing directive --- Src/Newtonsoft.Json/Converters/XmlNodeConverter.cs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Src/Newtonsoft.Json/Converters/XmlNodeConverter.cs b/Src/Newtonsoft.Json/Converters/XmlNodeConverter.cs index ebd25be6..e0a44a72 100644 --- a/Src/Newtonsoft.Json/Converters/XmlNodeConverter.cs +++ b/Src/Newtonsoft.Json/Converters/XmlNodeConverter.cs @@ -1476,12 +1476,13 @@ namespace Newtonsoft.Json.Converters return element; } #endif - +#if !(DOTNET || PORTABLE) if (objectType == typeof(XmlElement)) { return document.DocumentElement.WrappedNode; } - +#endif + return document.WrappedNode; }