我有查询选择数据:
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格式。请再帮忙。感谢
答案 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