将Json格式转换为xml格式

时间:2013-09-24 15:30:15

标签: xml json vb.net json.net

我有查询选择数据:

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 

但这不是xml格式。请再帮忙。感谢

2 个答案:

答案 0 :(得分:3)

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

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

以上内容会返回XDocument。要将XML作为字符串返回,请在其末尾添加.ToString()。根据您的评论,您可能会尝试将此代码添加到现有的GetPersonListJson方法中。所以你可以在上面的一行之后添加这一行:

Return xml.ToString()

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

UPDATE:您的示例字符串是一个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

答案 1 :(得分: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