C# 将StreamReader转换为对象列表
我打这样的电话:C# 将StreamReader转换为对象列表,c#,.net,web-services,C#,.net,Web Services,我打这样的电话: HttpWebResponse response = (HttpWebResponse)request.GetResponse(); using (var reader = new StreamReader(response.GetResponseStream())) { var line = reader.ReadLine(); } “行”的内容是: <?xml version="1.0" encoding="UTF-8"?> <soap:Enve
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
using (var reader = new StreamReader(response.GetResponseStream()))
{
var line = reader.ReadLine();
}
“行”的内容是:
<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:soap="...." xmlns:xsd="..." xmlns:xsi=".....">
<soap:Body>
<findResponse xmlns="....">
<out>
<MyType>
<city>CityA</city>
<firstName>AAA</firstName>
<lastName>A</lastName>
</MyType>
<MyType>
<city>CityB</city>
<firstName>BBB</firstName>
<lastName>B</lastName>
</MyType>
</out>
</findResponse>
</soap:Body>
</soap:Envelope>
public class MyType
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string City { get; set; }
}
城市
AAA
A.
城巴
BBB
B
公共类MyType
{
公共字符串名{get;set;}
公共字符串LastName{get;set;}
公共字符串City{get;set;}
}
我想返回一个列表,在本例中有两个条目
我该怎么做
谢谢,换成这样怎么样:
var list = XDocument.Load(response.GetResponseStream())
.Descendants("MyType")
.Select(elem => new MyType
{
FirstName = elem.Element("firstName").Value,
LastName = elem.Element("lastName").Value,
City = elem.Element("city").Value
}).ToList();
另一方面,HttpWebResponse
实现了IDisposable
,应该使用放在中。因此,整个命令可能如下所示:
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
var list = XDocument.Load(response.GetResponseStream())
.Descendants("MyType")
.Select(elem => new MyType
{
FirstName = elem.Element("firstName").Value,
LastName = elem.Element("lastName").Value,
City = elem.Element("city").Value
}).ToList();
}
更新:这可能是名称空间问题:
XNamespace ns = "http://www.your-namespace.com";
var list = XDocument.Load(response.GetResponseStream())
.Descendants(ns + "MyType")
.Select(elem => new MyType
{
FirstName = elem.Element("firstName").Value,
LastName = elem.Element("lastName").Value,
City = elem.Element("city").Value
}).ToList();
不如换成这样:
var list = XDocument.Load(response.GetResponseStream())
.Descendants("MyType")
.Select(elem => new MyType
{
FirstName = elem.Element("firstName").Value,
LastName = elem.Element("lastName").Value,
City = elem.Element("city").Value
}).ToList();
另一方面,HttpWebResponse
实现了IDisposable
,应该使用放在中。因此,整个命令可能如下所示:
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
var list = XDocument.Load(response.GetResponseStream())
.Descendants("MyType")
.Select(elem => new MyType
{
FirstName = elem.Element("firstName").Value,
LastName = elem.Element("lastName").Value,
City = elem.Element("city").Value
}).ToList();
}
更新:这可能是名称空间问题:
XNamespace ns = "http://www.your-namespace.com";
var list = XDocument.Load(response.GetResponseStream())
.Descendants(ns + "MyType")
.Select(elem => new MyType
{
FirstName = elem.Element("firstName").Value,
LastName = elem.Element("lastName").Value,
City = elem.Element("city").Value
}).ToList();
从out标记为根的“行”生成xml,然后将其转换为json,然后将json反序列化为列表:
var myListOfMyType = JsonConvert.DeserializeObject(myJson, typeof(MyType));
从out标记为根的“行”生成xml,然后将其转换为json,然后将json反序列化为列表:
var myListOfMyType = JsonConvert.DeserializeObject(myJson, typeof(MyType));
不是指向文件的路径,而是StreamReader尝试了第二种解决方案,Fiddler显示调用webservice后,webservice结果正确,但列表为空。@Kris-I,XName
(MyType
,在本例中)区分大小写。一切拼写正确吗?它抛出了某种类型的异常吗?拼写正确,没有异常,只列出empty@Kris-一、 回答与您在问题中所显示的完全相同?不是文件路径,而是StreamReader尝试了您的第二个解决方案,Fiddler show调用了Web服务,Web服务结果是正确的,但列表是空的。@Kris-I,XName
(MyType
在本例中)区分大小写。所有内容拼写是否正确?是否引发了某种类型的异常?拼写正常,无异常,仅列出empty@Kris-一、 答案与您的问题中所显示的完全一样?“从您的“行”生成一个xml,其中out标记将是根“how”?例如:myXmlDocument.LoadXml(行);var node=myXmlDocument.SelectSingleNode(//out”)--从中您可以形成xml文档/您需要这样的模式来适应MyType类。“从“行”中生成xml,其中out标记将是根“how”?例如:myXmlDocument.LoadXml(行);var node=myXmlDocument.SelectSingleNode(//out)--从这里您可以形成xml文档/您需要这样的模式来适应MyType类。