diff --git a/Src/Newtonsoft.Json.Tests/Converters/XmlNodeConverterTest.cs b/Src/Newtonsoft.Json.Tests/Converters/XmlNodeConverterTest.cs index 3dfe29d2..7fe895d2 100644 --- a/Src/Newtonsoft.Json.Tests/Converters/XmlNodeConverterTest.cs +++ b/Src/Newtonsoft.Json.Tests/Converters/XmlNodeConverterTest.cs @@ -1219,6 +1219,44 @@ namespace Newtonsoft.Json.Tests.Converters ] }", output); } + + [Test] + public void EmtpyElementWithArrayAttributeShouldWriteAttributes() + { + string xml = @" + + + + + + +"; + + XmlDocument d = new XmlDocument(); + d.LoadXml(xml); + + string json = JsonConvert.SerializeXmlNode(d, Formatting.Indented); + + Assert.AreEqual(@"{ + ""?xml"": { + ""@version"": ""1.0"", + ""@encoding"": ""utf-8"" + }, + ""root"": { + ""A"": { + ""B"": [ + { + ""@name"": ""sample"" + } + ], + ""C"": [ + null, + null + ] + } + } +}", json); + } } } #endif \ No newline at end of file diff --git a/Src/Newtonsoft.Json/Converters/XmlNodeConverter.cs b/Src/Newtonsoft.Json/Converters/XmlNodeConverter.cs index 8c388dff..bef5eb6d 100644 --- a/Src/Newtonsoft.Json/Converters/XmlNodeConverter.cs +++ b/Src/Newtonsoft.Json/Converters/XmlNodeConverter.cs @@ -961,7 +961,7 @@ namespace Newtonsoft.Json.Converters SerializeGroupedNodes(writer, node, manager, writePropertyName); break; case XmlNodeType.Element: - if (IsArray(node) && node.ChildNodes.All(n => n.LocalName == node.LocalName)) + if (IsArray(node) && node.ChildNodes.All(n => n.LocalName == node.LocalName) && node.ChildNodes.Count > 0) { SerializeGroupedNodes(writer, node, manager, false); }