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:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user