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类。