0

SOAP XML を使用するサードパーティの 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 として返され、この応答を、作成中の MVC 4 アプリの一部として作成した ViewModel に変換したいと考えています。うまくいくアプローチは何ですか?

4

1 に答える 1

1

最初に完全な 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; }
}

ついに:

 return roadMarqueCustomers;
于 2013-11-07T14:32:18.837 に答える