Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将XmlNode转换为C对象?_C#_Xml - Fatal编程技术网

C# 如何将XmlNode转换为C对象?

C# 如何将XmlNode转换为C对象?,c#,xml,C#,Xml,我使用一个使用soapxml的第三方web服务。我构造XML请求,并按如下方式获取XML: <GetCustomers xmlns=""> <Header> <Version>1.0</Version> <Type>GetCustomers</Type> <GeneratedDate>07/11/2013 13:30</GeneratedDate> </Heade

我使用一个使用soapxml的第三方web服务。我构造XML请求,并按如下方式获取XML:

<GetCustomers xmlns="">
  <Header>
    <Version>1.0</Version>
    <Type>GetCustomers</Type>
    <GeneratedDate>07/11/2013 13:30</GeneratedDate>
  </Header>
  <ResultMessage>
    <Message>7 Customers found</Message>
    <Code>CustomerFound</Code>
    <Success>true</Success>
  </ResultMessage>
  <Customer>
    <CustomerName>CUSTOMER ABC</CustomerName>
    <CustomerID>33</CustomerID>
    <CustomerCode></CustomerCode>
  </Customer>

它以对象类型XmlNode的形式返回,我想将此响应转换为作为我正在构建的MVC4应用程序的一部分创建的ViewModel。什么方法可行?

首先将完整的XML转换为字符串:

string xml = response.OuterXml.ToString();
然后使用XDocument:

XDocument xDoc = XDocument.Parse(xml);
现在使用LINQ to XML选择每个Customer元素并创建一个列表:

var obj = (from element in xDoc.Descendants("GetCustomers").Elements("Customer")
           select new {
              ID = element.Element("CustomerID").Value,
              Name element.Element("CustomerName").Value,
              Code = element.Element("CustomerCode").Value
           }).ToList();
我确信现在有很多更好的方法将其转换为我的ViewModel数据,但我就是这样做的:

foreach (var item in obj)
{
    RMCustomer customer = new RMCustomer();
    if (item.ID != null && item.ID.Length > 0)
    {
        customer.RMInternalUniqueID = Convert.ToInt32(item.ID);
    }

    if (item.Code != null && item.Code.Length > 0)
    {
        customer.CustomerRMExternalID = Convert.ToInt32(item.Code);
    }
    else
    {
        customer.CustomerRMExternalID = null;
    }
    if (item.Name != null && item.Name.Length > 0)
    {
        customer.CustomerName = item.Name;
    }
    if (customer != null)
    {
        roadMarqueCustomers.Add(customer);
    }
}
我应该指出,我的ViewModel只是:

public class RMCustomer
{
    public string CustomerName { get; set; }
    public int CustomerRMInternalUniqueID { get; set; }
    public Nullable<int> CustomerRMExternalID { get; set; }
}

如果你知道答案,你为什么要问这个问题?因为我一直在寻找答案,无法找到其他各种方法,所以我想我会分享我的发现,以防对像我这样的新手有所帮助。我以为这是在规定之内的:@MikeRouse只是一个帮助你的提示-而不是做一些事情!=null&&someString.Length>0您可以执行String.IsNullOrEmptysomeString,或者如果不需要任何null、、、等-String.IsNullOrWhiteSpaceSomeStrings,您也可以使用XMLSerializer类从XML执行实际映射,我这里有一个示例:或者您可以让其他人执行所有提升,包括web服务的消费,例如。您为服务创建DTO的数据传输对象,它使用web服务并将DTO的数据传输对象交给您。
 return roadMarqueCustomers;