2014-09-29 112 views
1

我想使用.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创建一个有效的根元素之前,我需要对响应流做些什么?

回答

0

要回答我自己的问题,JsonReaderWriterFactory代码工作。

我有一行代码:调用JsonReaderWriterFactory前

StreamReader reader = new StreamReader(dataStream)) 
string responseFromServer = reader.ReadToEnd(); 

以输出的json调试目的(线冷落例子为简单起见)。这意味着当dataStream被用于转换时,它是空的,已经被读取结束。没有它,现在按预期工作。

相关问题