diff --git a/Src/Newtonsoft.Json.Tests/Converters/XmlNodeConverterTest.cs b/Src/Newtonsoft.Json.Tests/Converters/XmlNodeConverterTest.cs index 832fde45..8df81e94 100644 --- a/Src/Newtonsoft.Json.Tests/Converters/XmlNodeConverterTest.cs +++ b/Src/Newtonsoft.Json.Tests/Converters/XmlNodeConverterTest.cs @@ -372,8 +372,46 @@ namespace Newtonsoft.Json.Tests.Converters var equals = XElement.DeepEquals(xmlBack, xml); Assert.IsTrue(equals); } + + [Test] + public void DeserializeUndeclaredNamespacePrefix() + { + XmlDocument doc = JsonConvert.DeserializeXmlNode("{ A: { '@xsi:nil': true } }"); + + Console.WriteLine(doc.OuterXml); + + XDocument xdoc = JsonConvert.DeserializeXNode("{ A: { '@xsi:nil': true } }"); + + Assert.AreEqual(doc.OuterXml, xdoc.ToString()); + } #endif + [Test] + public void DeserializeMultipleRootElements() + { + string json = @"{ + ""Id"": 1, + ""Email"": ""james@example.com"", + ""Active"": true, + ""CreatedDate"": ""2013-01-20T00:00:00Z"", + ""Roles"": [ + ""User"", + ""Admin"" + ], + ""Team"": { + ""Id"": 2, + ""Name"": ""Software Developers"", + ""Description"": ""Creators of fine software products and services."" + } +}"; + ExceptionAssert.Throws( + () => + { + JsonConvert.DeserializeXmlNode(json); + }, + "JSON root object has multiple properties. The root object must have a single property in order to create a valid XML document. Consider specifing a DeserializeRootElementName."); + } + [Test] public void DocumentSerializeIndented() { diff --git a/Src/Newtonsoft.Json/Converters/XmlNodeConverter.cs b/Src/Newtonsoft.Json/Converters/XmlNodeConverter.cs index 402fb764..9607d6a0 100644 --- a/Src/Newtonsoft.Json/Converters/XmlNodeConverter.cs +++ b/Src/Newtonsoft.Json/Converters/XmlNodeConverter.cs @@ -1376,7 +1376,7 @@ namespace Newtonsoft.Json.Converters string attributePrefix = MiscellaneousUtils.GetPrefix(nameValue.Key); IXmlNode attribute = (!string.IsNullOrEmpty(attributePrefix)) - ? document.CreateAttribute(nameValue.Key, manager.LookupNamespace(attributePrefix), nameValue.Value) + ? document.CreateAttribute(nameValue.Key, manager.LookupNamespace(attributePrefix) ?? string.Empty, nameValue.Value) : document.CreateAttribute(nameValue.Key, nameValue.Value); element.SetAttributeNode(attribute);