Skip to main content
 首页 » 编程设计

c#之将 XML 中的 ebay web 服务响应转换为 C# 对象

2024年02月01日34JustinYoung

我正在创建一个 Windows Phone 7 应用程序,我正在其中使用 Ebay 链接

http://svcs.ebay.com/services/search/FindingService/v1?OPERATION-NAME=findItemsByKeywords&SERVICE-VERSION=1.0.0&SECURITY-APPNAME=AppID&RESPONSE-DATA-FORMAT=XML&REST-PAYLOAD&keywords=harry%20potter%20phoenix

获取以下格式的项目列表

<findItemsByKeywordsResponse> 
  <ack>Success</ack> 
  <version>1.12.0</version> 
  <timestamp>2013-03-10T15:50:40.717Z</timestamp> 
  <searchResult count="100"> 
    <item></item> 
    <item></item> 
    <item> 
      <itemId>221170783013</itemId> 
      <title>Harry Potter and the Order of the Phoenix (DVD, 2007, Full Frame) - New Unopened</title> 
      <globalId>EBAY-ENCA</globalId> 
      <primaryCategory> 
        <categoryId>617</categoryId> 
        <categoryName>DVDs & Blu-ray Discs</categoryName> 
      </primaryCategory> 
      <galleryURL>http://thumbs2.ebaystatic.com/m/mm6I9OfrWGLKdYk-gLVSacg/140.jpg</galleryURL> 
      <viewItemURL>http://www.ebay.com/itm/Harry-Potter-and-Order-Phoenix-DVD-2007-Full-Frame-New-Unopened-/221170783013?pt=US_DVD_HD_DVD_Blu_ray</viewItemURL> 
      <productId type="ReferenceID">62940319</productId> 
      <paymentMethod>PayPal</paymentMethod> 
      <autoPay>false</autoPay> 
      <postalCode>P3P1S9</postalCode> 
      <location>Canada</location> 
      <country>CA</country> 
      <shippingInfo> 
        <shippingServiceCost currencyId="USD">4.99</shippingServiceCost> 
        <shippingType>Flat</shippingType> 
        <shipToLocations>Worldwide</shipToLocations> 
        <expeditedShipping>false</expeditedShipping> 
        <oneDayShippingAvailable>false</oneDayShippingAvailable> 
        <handlingTime>1</handlingTime> 
      </shippingInfo> 
      <sellingStatus></sellingStatus> 
      <listingInfo></listingInfo> 
      <returnsAccepted>true</returnsAccepted> 
      <condition></condition> 
      <isMultiVariationListing>false</isMultiVariationListing> 
      <topRatedListing>false</topRatedListing> 
    </item> 
    <item> 
      <itemId>130861888976</itemId> 
      <title>Harry Potter and the Order of the Phoenix Year 5 by J. K. Rowling (2003,...</title> 
      <globalId>EBAY-US</globalId> 
      <primaryCategory> 
        <categoryId>279</categoryId> 
        <categoryName>Children & Young Adults</categoryName> 
      </primaryCategory> 
      <galleryURL>http://thumbs1.ebaystatic.com/m/mkjj5zzPkMQ6FRLW5FlvXZQ/140.jpg</galleryURL> 
      <viewItemURL>http://www.ebay.com/itm/Harry-Potter-and-Order-Phoenix-Year-5-J-K-Rowling-2003-/130861888976?pt=US_Childrens_Books</viewItemURL> 
      <productId type="ReferenceID">2327833</productId> 
      <paymentMethod>PayPal</paymentMethod> 
      <autoPay>false</autoPay> 
      <postalCode>30535</postalCode> 
      <location>Demorest,GA,USA</location> 
      <country>US</country> 
      <shippingInfo> 
        <shippingServiceCost currencyId="USD">4.0</shippingServiceCost> 
        <shippingType>Flat</shippingType> 
        <shipToLocations>US</shipToLocations> 
        <expeditedShipping>false</expeditedShipping> 
        <oneDayShippingAvailable>false</oneDayShippingAvailable> 
        <handlingTime>3</handlingTime> 
      </shippingInfo> 
      <sellingStatus> 
        <currentPrice currencyId="USD">12.99</currentPrice> 
        <convertedCurrentPrice currencyId="USD">12.99</convertedCurrentPrice> 
        <bidCount>0</bidCount> 
        <sellingState>Active</sellingState> 
        <timeLeft>P0DT0H21M54S</timeLeft> 
      </sellingStatus> 
      <listingInfo> 
        <bestOfferEnabled>false</bestOfferEnabled> 
        <buyItNowAvailable>false</buyItNowAvailable> 
        <startTime>2013-03-03T16:12:34.000Z</startTime> 
        <endTime>2013-03-10T16:12:34.000Z</endTime> 
        <listingType>Auction</listingType> 
        <gift>false</gift> 
      </listingInfo> 
      <returnsAccepted>false</returnsAccepted> 
      <condition> 
        <conditionId>1000</conditionId> 
        <conditionDisplayName>Brand New</conditionDisplayName> 
      </condition> 
      <isMultiVariationListing>false</isMultiVariationListing> 
      <topRatedListing>false</topRatedListing> 
    </item> 
  </searchResult> 
  <paginationOutput> 
    <totalPages>27</totalPages> 
    <totalEntries>2602</totalEntries> 
    <pageNumber>1</pageNumber> 
    <entriesPerPage>100</entriesPerPage> 
  </paginationOutput> 
  <itemSearchURL>http://www.ebay.com/sch/i.html?_nkw=harry+potter+phoenix&_ddo=1&_ipg=100&_pgn=1</itemSearchURL> 
</findItemsByKeywordsResponse> 

在整个响应中,我需要仅包含标题、描述、结束时间、列表类型和当前价格的项目列表或 ObservableCollections。

最优化的编码方式是什么。我无法想到最简单的思考方式,比如直接反序列化对 C# 对象的 XML 响应。

我还没有尝试过任何代码,但我目前对如何实现这一目标感到困惑?

请您参考如下方法:

最优化?编写一个基于 XmlReader 的解析器。一种相当快速的 headless 痛方式?使用 XLinq。未经测试:

var items = XDocument.Parse(data) 
    .Elements("findItemsByKeywordsResponse") 
    .Elements("searchResult") 
    .Elements("item") 
    .Select(item => 
    { 
        var li = item.Element("listingInfo"); 
 
        return new 
        { 
            Title = (string)item.Element("title"), 
            EndTime = li != null ? (DateTime?)li.Element("endTime") : null, 
            ListingType = li != null ? (string)li.Element("listingType") : null, 
        }; 
    });