2013-09-24 141 views
3

我有查询来选择数据:转换JSON格式为XML格式

Public Function GetStaffList(StaffCode As String) As IEnumerable 
    Dim query = (From c In Staff Where c.StaffID= StaffCode Select c) 
    Return query 
End Function 

使用下面的代码返回的JSON我后:

Public Function GetPersonListJson(PersonCode As String) As String 
    Return JsonConvert.SerializeObject(GetStaffList(StaffCode)) 
End Function 

JSON格式如下:

"[{\"$id\":\"1\",\"PersonID\":10001.0,\"PersonName\":\"Staff1\"}]" 

如果我想以XML格式返回,我该怎么办?由于

更新:我尝试使用下面的代码返回XML

Public Function GetPersonListJson(PersonCode As String) As String 
     Dim json = JsonConvert.SerializeObject(GetStaffList(StaffCode)) 
     Dim rootJson = "{""root"":" & json & "}" 
     Dim xml = JsonConvert.DeserializeXNode(rootJson) 
     Return xml.ToString() 
    End Function 

XML的调试过程中的值是:

<root xmlns:json="http://james.newtonking.com/projects/json" json:id="1"><PersonID>10001</PersonID><PersonName>Staff1</PersonName> <EntityKey json:id="2"><EntitySetName>tblPerson</EntitySetName><EntityContainerName>PersonEntities</EntityContainerName><EntityKeyValues><Key>PersonID</Key><Type>System.Decimal</Type><Value>10001</Value></EntityKeyValues></EntityKey></root> 

后加入的ToString(),返回结果如下:

"\u000d\u000a \u000d\u000a 10001<\/PersonID>\u000d\u000a Staff1<\/PersonName>\u000d\u000a \u000d\u000a 

但这不是xm l格式。请再次帮忙。谢谢

回答

3

您可以使用DeserializeXNode method。根据您的JSON,您可能需要为XML元素指定一个根元素名称。下面我用“Staff”作为根名。

Dim xml = JsonConvert.DeserializeXNode(json, "Staff") 

以上返回XDocument。要将XML作为字符串返回,请在其末尾添加.ToString()。根据您的意见,这听起来像是您想要将此代码添加到您现有的GetPersonListJson方法中。所以你可以在上面的代码后加上这一行:

Return xml.ToString() 

也就是说,你的方法名称不再与你实际做的相匹配。它被命名为GetPersonListJson,但现在您将XML作为字符串返回,而不是JSON。我建议将其重命名为清晰。

更新:您的示例字符串是一个json数组,这就是为什么上述给出XmlNodeConverter can only convert JSON that begins with an object错误。要解决这个问题就需要一个根元素手动添加到您的JSON:

Public Function GetPersonListJson(PersonCode As String) As String 
    Dim json = JsonConvert.SerializeObject(GetStaffList(StaffCode)) 

    ' this step adds a root to the json (you can rename "root" to anything)' 
    Dim rootJson = "{""root"":" & json & "}" 

    Dim xml = JsonConvert.DeserializeXNode(rootJson) 
    Return xml.ToString() 
End Function 
+0

你的意思是我的代码应该是这样吗? JsonConvert.DeserializeXNode(JsonConvert.SerializeObject(GetStaffList(StaffCode)), “工作人员”)? –

+0

@HowardHee是的,我的意思是我的代码中的'json'是'GetPersonListJson'方法的结果,这是您在评论中显示的内容。 –

+0

Dim json = JsonConvert.SerializeObject(GetStaffList(StaffCode)) Dim xml = JsonConvert.DeserializeXNode(json,“Staff”) 返回xml我写下面的代码,但得到错误消息:“System.Xml.Linq.XDocument can not被转换为字符串“ –

0

我发现这工作:

string xml = ""; 
    string json = @"{ 
        '?xml': { 
         '@version': '1.0', 
         '@standalone': 'no' 
        }, 
        'root': { 
        'object': " + JsonConvert.SerializeObject(object, Formatting.None) 
        + "}}"; 
    var xd = JsonConvert.DeserializeXmlNode(json); 
    using (var sw = new StringWriter()) { 
     using (var xw = System.Xml.XmlWriter.Create(sw)) { 
     xd.WriteTo(xw); 
     xw.Flush(); 
     xml = sw.GetStringBuilder().ToString(); 
     } 
    } 

信用此页:http://james.newtonking.com/json/help/html/ConvertingJSONandXML.htm