diff --git a/Src/Newtonsoft.Json.Tests/Converters/XmlNodeConverterTest.cs b/Src/Newtonsoft.Json.Tests/Converters/XmlNodeConverterTest.cs
index 8d33a679..170a00b3 100644
--- a/Src/Newtonsoft.Json.Tests/Converters/XmlNodeConverterTest.cs
+++ b/Src/Newtonsoft.Json.Tests/Converters/XmlNodeConverterTest.cs
@@ -455,6 +455,16 @@ namespace Newtonsoft.Json.Tests.Converters
XmlDocument newDoc = (XmlDocument)JsonConvert.DeserializeXmlNode(strJSON);
}
+
+ [Test]
+ public void MultipleRootPropertiesAddRootElement()
+ {
+ string strJSON = @"{""count"": 773840,""photos"": 773840}";
+
+ XmlDocument newDoc = (XmlDocument)JsonConvert.DeserializeXmlNode(strJSON, "myRoot");
+
+ Assert.AreEqual(@"773840773840", newDoc.InnerXml);
+ }
}
}
#endif
\ No newline at end of file
diff --git a/Src/Newtonsoft.Json.Tests/Linq/JObjectTests.cs b/Src/Newtonsoft.Json.Tests/Linq/JObjectTests.cs
index 6153656e..60848f70 100644
--- a/Src/Newtonsoft.Json.Tests/Linq/JObjectTests.cs
+++ b/Src/Newtonsoft.Json.Tests/Linq/JObjectTests.cs
@@ -359,6 +359,5 @@ Parameter name: arrayIndex")]
person = person;
}
-
}
}
diff --git a/Src/Newtonsoft.Json/Converters/XmlNodeConverter.cs b/Src/Newtonsoft.Json/Converters/XmlNodeConverter.cs
index 6a934ab8..45df035a 100644
--- a/Src/Newtonsoft.Json/Converters/XmlNodeConverter.cs
+++ b/Src/Newtonsoft.Json/Converters/XmlNodeConverter.cs
@@ -46,6 +46,8 @@ namespace Newtonsoft.Json.Converters
private const string DeclarationName = "?xml";
private const string JsonNamespaceUri = "http://james.newtonking.com/projects/json";
+ public string DeserializeRootElementName { get; set; }
+
#region Writing
///
/// Writes the JSON representation of the object.
@@ -268,12 +270,24 @@ namespace Newtonsoft.Json.Converters
XmlDocument document = new XmlDocument();
XmlNamespaceManager manager = new XmlNamespaceManager(document.NameTable);
+ XmlNode rootNode;
+
+ if (!string.IsNullOrEmpty(DeserializeRootElementName))
+ {
+ rootNode = document.CreateElement(DeserializeRootElementName);
+ document.AppendChild(rootNode);
+ }
+ else
+ {
+ rootNode = document;
+ }
+
if (reader.TokenType != JsonToken.StartObject)
throw new JsonSerializationException("XmlNodeConverter can only convert JSON that begins with an object.");
reader.Read();
- DeserializeNode(reader, document, manager, document);
+ DeserializeNode(reader, document, manager, rootNode);
return document;
}
diff --git a/Src/Newtonsoft.Json/JsonConvert.cs b/Src/Newtonsoft.Json/JsonConvert.cs
index 2fa505f3..f0273eca 100644
--- a/Src/Newtonsoft.Json/JsonConvert.cs
+++ b/Src/Newtonsoft.Json/JsonConvert.cs
@@ -623,8 +623,20 @@ namespace Newtonsoft.Json
/// The JSON string.
/// The deserialized XmlNode
public static XmlNode DeserializeXmlNode(string value)
+ {
+ return DeserializeXmlNode(value, null);
+ }
+
+ ///
+ /// Deserializes the XmlNode from a JSON string nested in a root elment.
+ ///
+ /// The JSON string.
+ /// The root element name.
+ /// The deserialized XmlNode
+ public static XmlNode DeserializeXmlNode(string value, string rootElementName)
{
XmlNodeConverter converter = new XmlNodeConverter();
+ converter.DeserializeRootElementName = rootElementName;
return (XmlDocument)DeserializeObject(value, typeof(XmlDocument), converter);
}