-Added DeserializeNode overload to specify a root element
This commit is contained in:
@@ -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(@"<myRoot><count>773840</count><photos>773840</photos></myRoot>", newDoc.InnerXml);
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
@@ -359,6 +359,5 @@ Parameter name: arrayIndex")]
|
||||
|
||||
person = person;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
/// <summary>
|
||||
/// 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;
|
||||
}
|
||||
|
||||
@@ -623,8 +623,20 @@ namespace Newtonsoft.Json
|
||||
/// <param name="value">The JSON string.</param>
|
||||
/// <returns>The deserialized XmlNode</returns>
|
||||
public static XmlNode DeserializeXmlNode(string value)
|
||||
{
|
||||
return DeserializeXmlNode(value, null);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Deserializes the XmlNode from a JSON string nested in a root elment.
|
||||
/// </summary>
|
||||
/// <param name="value">The JSON string.</param>
|
||||
/// <param name="rootElementName">The root element name.</param>
|
||||
/// <returns>The deserialized XmlNode</returns>
|
||||
public static XmlNode DeserializeXmlNode(string value, string rootElementName)
|
||||
{
|
||||
XmlNodeConverter converter = new XmlNodeConverter();
|
||||
converter.DeserializeRootElementName = rootElementName;
|
||||
|
||||
return (XmlDocument)DeserializeObject(value, typeof(XmlDocument), converter);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user