When converting JSON to XML encode characters in JSON property names which are not compatible with XML and decode when converting back.

This commit is contained in:
Oleg Deribas
2015-12-05 20:09:03 +00:00
parent c96779dc10
commit 7ce78833f4
2 changed files with 16 additions and 3 deletions
@@ -2554,6 +2554,19 @@ namespace Newtonsoft.Json.Tests.Converters
Assert.AreEqual(@"{""DocumentId"":""13779965364495889899""}", json2);
}
#endif
[Test]
public void DeserializeXmlIncompatibleCharsInPropertyName()
{
var json = "{\"%name\":\"value\"}";
XmlDocument node = JsonConvert.DeserializeXmlNode(json);
Assert.AreEqual("<_x0025_name>value</_x0025_name>", node.OuterXml);
string json2 = JsonConvert.SerializeXmlNode(node);
Assert.AreEqual(json, json2);
}
[Test]
public void SerializeEmptyNodeAndOmitRoot()
@@ -99,7 +99,7 @@ namespace Newtonsoft.Json.Converters
public IXmlElement CreateElement(string elementName)
{
return new XmlElementWrapper(_document.CreateElement(elementName));
return new XmlElementWrapper(_document.CreateElement(XmlConvert.EncodeName(elementName)));
}
public IXmlElement CreateElement(string qualifiedName, string namespaceUri)
@@ -977,9 +977,9 @@ namespace Newtonsoft.Json.Converters
: manager.LookupPrefix(node.NamespaceUri);
if (!string.IsNullOrEmpty(prefix))
return prefix + ":" + node.LocalName;
return prefix + ":" + XmlConvert.DecodeName(node.LocalName);
else
return node.LocalName;
return XmlConvert.DecodeName(node.LocalName);
}
private string GetPropertyName(IXmlNode node, XmlNamespaceManager manager)