简体   繁体   English

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

[英]How do I Convert XmlNode to C# Objects?

I consume a third-party web service that uses SOAP XML. 我使用了使用SOAP XML的第三方Web服务。 I construct my XML request and get XML back like this: 我构造我的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>

It returns it as an object type XmlNode and I want to convert this response into a ViewModel I have created as part of an MVC 4 app I am building. 它以对象类型XmlNode的形式返回它,并且我想将此响应转换为我正在创建的ViewModel中创建的ViewModel。 What is an approach that will work? 什么是可行的方法?

Convert the full XML into a string first: 首先将完整的XML转换为字符串:

string xml = response.OuterXml.ToString();

Then use XDocument: 然后使用XDocument:

XDocument xDoc = XDocument.Parse(xml);

Now use LINQ to XML to select each Customer element and create a list: 现在使用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();

I am sure there are many better ways to now convert this into my ViewModel data but this is how I did it: 我确信现在有很多更好的方法可以将其转换为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);
    }
}

I should point out my ViewModel is simply: 我应该指出我的ViewModel很简单:

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

Finally: 最后:

 return roadMarqueCustomers;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM