diff --git a/Src/Newtonsoft.Json.Tests/Converters/XmlNodeConverterTest.cs b/Src/Newtonsoft.Json.Tests/Converters/XmlNodeConverterTest.cs index 2c7a861d..61dbf5bc 100644 --- a/Src/Newtonsoft.Json.Tests/Converters/XmlNodeConverterTest.cs +++ b/Src/Newtonsoft.Json.Tests/Converters/XmlNodeConverterTest.cs @@ -1160,6 +1160,32 @@ namespace Newtonsoft.Json.Tests.Converters ""role"": ""Admin1"" } } +}"; + StringAssert.AreEqual(expected, arrayJsonText); + + arrayXml = @" + + Alan + http://www.google.com + Admin + + "; + + arrayDoc = new XmlDocument(); + arrayDoc.LoadXml(arrayXml); + + arrayJsonText = SerializeXmlNode(arrayDoc); + expected = @"{ + ""root"": { + ""person"": { + ""@id"": ""1"", + ""name"": ""Alan"", + ""url"": ""http://www.google.com"", + ""role"": [ + ""Admin"" + ] + } + } }"; StringAssert.AreEqual(expected, arrayJsonText); } diff --git a/Src/Newtonsoft.Json/Converters/XmlNodeConverter.cs b/Src/Newtonsoft.Json/Converters/XmlNodeConverter.cs index 6775bbb1..89f8da61 100644 --- a/Src/Newtonsoft.Json/Converters/XmlNodeConverter.cs +++ b/Src/Newtonsoft.Json/Converters/XmlNodeConverter.cs @@ -2232,6 +2232,30 @@ namespace Newtonsoft.Json.Converters { foreach (IXmlNode xmlNode in c) { +#if HAVE_XML_DOCUMENT + // ignores the attribute if it is the declaration of namespace "JsonNamespaceUri" + var xmlAttribute = xmlNode.WrappedNode as XmlAttribute; + + if (xmlAttribute != null && + xmlAttribute.Prefix.Equals("xmlns", StringComparison.OrdinalIgnoreCase) && + xmlAttribute.Value == JsonNamespaceUri) + { + continue; + } +#endif + +#if HAVE_XLINQ + // ignores the attribute if it is the declaration of namespace "JsonNamespaceUri" + var xAttribute = xmlNode.WrappedNode as XAttribute; + + if (xAttribute != null && + xAttribute.IsNamespaceDeclaration && + xAttribute.Value == JsonNamespaceUri) + { + continue; + } +#endif + if (xmlNode.NamespaceUri != JsonNamespaceUri) { return true;