-Fixed converting JSON byte array data to XML

This commit is contained in:
James Newton-King
2017-05-28 12:52:08 +12:00
parent fbd7e5eb95
commit 87d99204bf
2 changed files with 70 additions and 19 deletions
@@ -2146,6 +2146,71 @@ namespace Newtonsoft.Json.Tests.Converters
}
}
[Test]
public void NullAttributeValue()
{
var node = JsonConvert.DeserializeXmlNode(@"{
""metrics"": {
""type"": ""CPULOAD"",
""@value"": null
}
}");
StringAssert.AreEqual(@"<metrics value=""""><type>CPULOAD</type></metrics>", node.OuterXml);
}
[Test]
public void NonStandardAttributeValues()
{
JObject o = new JObject
{
new JProperty("root", new JObject
{
new JProperty("@uri", new JValue(new Uri("http://localhost/"))),
new JProperty("@time_span", new JValue(TimeSpan.FromMinutes(1))),
new JProperty("@bytes", new JValue(System.Text.Encoding.UTF8.GetBytes("Hello world")))
})
};
using (var jsonReader = o.CreateReader())
{
var serializer = JsonSerializer.Create(new JsonSerializerSettings
{
Converters = { new XmlNodeConverter() },
});
var document = (XmlDocument)serializer.Deserialize(jsonReader, typeof(XmlDocument));
StringAssert.AreEqual(@"<root uri=""http://localhost/"" time_span=""00:01:00"" bytes=""SGVsbG8gd29ybGQ="" />", document.OuterXml);
}
}
[Test]
public void NonStandardElementsValues()
{
JObject o = new JObject
{
new JProperty("root", new JObject
{
new JProperty("uri", new JValue(new Uri("http://localhost/"))),
new JProperty("time_span", new JValue(TimeSpan.FromMinutes(1))),
new JProperty("bytes", new JValue(System.Text.Encoding.UTF8.GetBytes("Hello world")))
})
};
using (var jsonReader = o.CreateReader())
{
var serializer = JsonSerializer.Create(new JsonSerializerSettings
{
Converters = { new XmlNodeConverter() },
});
var document = (XmlDocument)serializer.Deserialize(jsonReader, typeof(XmlDocument));
StringAssert.AreEqual(@"<root><uri>http://localhost/</uri><time_span>00:01:00</time_span><bytes>SGVsbG8gd29ybGQ=</bytes></root>", document.OuterXml);
}
}
private static void JsonBodyToSoapXml(Stream json, Stream xml)
{
Newtonsoft.Json.JsonSerializerSettings settings = new Newtonsoft.Json.JsonSerializerSettings();
@@ -1799,6 +1799,7 @@ namespace Newtonsoft.Json.Converters
case JsonToken.Float:
case JsonToken.Boolean:
case JsonToken.Date:
case JsonToken.Bytes:
string text = ConvertTokenToXmlValue(reader);
if (text != null)
{
@@ -1831,25 +1832,7 @@ namespace Newtonsoft.Json.Converters
}
string encodedName = XmlConvert.EncodeName(attributeName);
string attributeValue = "";
switch (reader.TokenType)
{
case JsonToken.String:
case JsonToken.Integer:
case JsonToken.Float:
case JsonToken.Boolean:
case JsonToken.Date:
attributeValue = ConvertTokenToXmlValue(reader);
break;
case JsonToken.Null:
// empty attribute. do nothing
break;
default:
attributeValue = reader.Value.ToString();
break;
}
string attributeValue = ConvertTokenToXmlValue(reader);
IXmlNode attribute = (!string.IsNullOrEmpty(attributePrefix))
? document.CreateAttribute(encodedName, manager.LookupNamespace(attributePrefix), attributeValue)
@@ -1900,6 +1883,8 @@ namespace Newtonsoft.Json.Converters
#else
return XmlConvert.ToString(d, DateTimeUtils.ToDateTimeFormat(d.Kind));
#endif
case JsonToken.Bytes:
return Convert.ToBase64String((byte[])reader.Value);
case JsonToken.Null:
return null;
default:
@@ -1968,6 +1953,7 @@ namespace Newtonsoft.Json.Converters
case JsonToken.Integer:
case JsonToken.Float:
case JsonToken.Date:
case JsonToken.Bytes:
case JsonToken.StartConstructor:
return null;
}