我想使用.Net JsonReaderWriterFactory将JSON转换为XML。我使用的Json是有效的(经http://jsonformatter.curiousconcept.com/验证),并且在使用JsonConvert时可以转换相同的JSON,但是当试图用本地.Net功能替换Json.Net功能时(我在哪里工作的要求)我得到一个XmlException“根元素丢失”。如果使用带有根元素的有效Json的JsonReaderWriterFactory.CreateJsonReader,会导致XmlException(“Root元素缺失”)?
我使用的测试JSON是:
{
"customers" : [
{
"id": "b8ca3a6e-72c0-11e4-efc6-455d6c1876e5",
"name": "",
"customer_code": "WALKIN",
"customer_group_id": "b8ca3a6e-72c0-11e4-efc6-455d6c1840bb",
"customer_group_name": "All Customers",
"updated_at": "2014-09-26 09:13:47"
}
,
{
"id": "b8ca3a6e-72a9-11e4-efc6-455deebc001e",
"name": "Caroline Chambers",
"customer_code": "Caroline-79T7",
"customer_group_id": "b8ca3a6e-72c0-11e4-efc6-455d6c1840bb",
"customer_group_name": "All Customers",
"first_name": "Caroline",
"last_name": "Chambers",
"email": "[email protected]",
"postal_country_id" : "GB",
"updated_at": "2014-09-26 09:17:26",
"date_of_birth": "1980-02-20",
"sex": "F"
}
,
{
"id": "b8ca3a6e-72a9-11e4-efc6-455e1b7bcc0f",
"name": "Andrew Adamson",
"customer_code": "Andrew-85SW",
"customer_group_id": "b8ca3a6e-72c0-11e4-efc6-455d6c1840bb",
"customer_group_name": "All Customers",
"first_name": "Andrew",
"last_name": "Adamson",
"email": "[email protected]",
"postal_country_id" : "GB",
"updated_at": "2014-09-26 09:18:41",
"date_of_birth": "1980-06-01",
"sex": "M"
}
]
}
我的代码是:
XmlDocument document = new XmlDocument();
using (Stream dataStream = response.GetResponseStream())
{
using (XmlDictionaryReader xmlReader = JsonReaderWriterFactory.CreateJsonReader(dataStream, XmlDictionaryReaderQuotas.Max))
{
xmlReader.Read();
document.LoadXml(xmlReader.ReadOuterXml());
}
}
等效,使用相同的JSON响应,Json.Net而不会出现错误:
XmlDocument document = new XmlDocument();
using (Stream dataStream = response.GetResponseStream())
{
using (StreamReader reader = new StreamReader(dataStream))
{
string responseFromServer = reader.ReadToEnd();
document = JsonConvert.DeserializeXmlNode(responseFromServer, "Root");
reader.Close();
}
}
在调用CreateJsonReader创建一个有效的根元素之前,我需要对响应流做些什么?