-Added DeserializeNode overload to specify a root element

This commit is contained in:
JamesNK
2009-01-06 09:36:04 +00:00
parent a7b631a5f9
commit 663540f349
4 changed files with 37 additions and 2 deletions
@@ -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;
}
+12
View File
@@ -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);
}