C# 从服务asp.net解析XML响应

C# 从服务asp.net解析XML响应,c#,asp.net,xml-parsing,xmlhttprequest,C#,Asp.net,Xml Parsing,Xmlhttprequest,我正在尝试将web服务与我的项目集成。web服务返回一个XML响应: [ { “城市风格”:“城市风格”, “countryId”:“7”, “城市ID”:“2493”, “IATA”:“TIA” }, { “城市风格”:“城市风格”, “countryId”:“48”, “城市ID”:“1280”, “IATA”:“LRM” }, { “城市风格”:“城市风格”, “countryId”:“145”, “城市ID”:“2719”, “IATA”:“KHE” }, { “城市风格”:“城市风格

我正在尝试将web服务与我的项目集成。web服务返回一个XML响应:


[
{
“城市风格”:“城市风格”,
“countryId”:“7”,
“城市ID”:“2493”,
“IATA”:“TIA”
},
{
“城市风格”:“城市风格”,
“countryId”:“48”,
“城市ID”:“1280”,
“IATA”:“LRM”
},
{
“城市风格”:“城市风格”,
“countryId”:“145”,
“城市ID”:“2719”,
“IATA”:“KHE”
},
{
“城市风格”:“城市风格”,
“countryId”:“49”,
“城市ID”:“2851”,
“IATA”:“SSH”
}
]
我正试图解析这个响应。我想获取
cityId
countryId

XmlDocument listXML=new XmlDocument();
LoadXml(响应);
字符串baseNode=@“return/”;
XmlNode item1=listXML.SelectSingleNode(baseNode+“countryId”);
XmlNode item2=listXML.SelectSingleNode(baseNode+“cityId”);
字符串s=item1.InnerText.ToString();
字符串s1=item2.InnerText.ToString();

但它是空的;我该怎么办?

SOAP响应的
return
元素包含JSON字符串,因此不能使用
XmlDocument
和XPath查询从中提取数据

您需要使用JSON反序列化器查询JSON数据,例如我在本例中使用的—您可以通过安装NuGet包Newtonsoft.JSON将其添加到项目中

这里有两个步骤——首先从XML响应中提取
return
元素的内容。我使用的是
XDocument
而不是您使用的
XmlDocument
,因为
XDocument
是一种更现代的API,并且与诸如Linq之类的现代语言功能配合得更好

第二步是反序列化JSON内容,并将内容提取到变量中

var xDoc = XDocument.Parse(response);
var returnJson = xDoc.Descendants("return")
    .Single()
    .Value;

var cities = JArray.Parse(returnJson);
foreach (var city in cities)
{
    var cityId = city["cityId"].Value<string>();
    var countryId = city["countryId"].Value<string>();
}
var xDoc=XDocument.Parse(响应);
var returnJson=xDoc.substands(“return”)
.Single()
价值
var cities=JArray.Parse(returnJson);
foreach(城市中的var城市)
{
var cityId=city[“cityId”].Value();
var countryId=city[“countryId”].Value();
}

SOAP响应的
return
元素包含一个JSON字符串,因此不能使用
XmlDocument
和XPath查询从中提取数据

您需要使用JSON反序列化器查询JSON数据,例如我在本例中使用的—您可以通过安装NuGet包Newtonsoft.JSON将其添加到项目中

这里有两个步骤——首先从XML响应中提取
return
元素的内容。我使用的是
XDocument
而不是您使用的
XmlDocument
,因为
XDocument
是一种更现代的API,并且与诸如Linq之类的现代语言功能配合得更好

第二步是反序列化JSON内容,并将内容提取到变量中

var xDoc = XDocument.Parse(response);
var returnJson = xDoc.Descendants("return")
    .Single()
    .Value;

var cities = JArray.Parse(returnJson);
foreach (var city in cities)
{
    var cityId = city["cityId"].Value<string>();
    var countryId = city["countryId"].Value<string>();
}
var xDoc=XDocument.Parse(响应);
var returnJson=xDoc.substands(“return”)
.Single()
价值
var cities=JArray.Parse(returnJson);
foreach(城市中的var城市)
{
var cityId=city[“cityId”].Value();
var countryId=city[“countryId”].Value();
}