-Fixed converting JSON byte array data to XML
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user