将XML中的ebay webservice响应转换为C#对象?
问题描述:
我创建一个Windows Phone 7的应用程序中,我消耗的eBay链接将XML中的ebay webservice响应转换为C#对象?
获得在以下格式
<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>
了整个响应的项目列表,我需要的列表或仅包含Title,Description,EndTime,ListType,currentprice的Items的ObservableCollections。
什么是最优化的方式来编码这个。我无法想象最简单的方法,就像直接反序列化对C#对象的XML响应一样。
我还没有尝试过任何代码我目前困惑如何实现这一目标?
答
最优化?编写一个基于XmlReader
的解析器。一个相当快速的无头痛的方式?使用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,
};
});
答
我建议你使用JSON版本而不是XML,这样解析会更容易。
将RESPONSE-DATA-FORMAT更改为JSON,然后按照THIS BLOG POST中提到的过程进行操作,该过程可帮助您解析JSON数据。如果您仍然有任何问题,请再次询问。
http://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlserializer.aspx – 2013-03-10 16:23:46
我不知道,如果易趣的做法,但如果它让你获得在json中的响应,使用网站json2csharp.com。它为你做所有的工作。 – 2013-03-10 16:27:36
这是否[eBay支持示例](https://ebay.custhelp.com/app/answers/detail/a_id/2045/~/c%23.net-code-sample-to-call-ebay-trading-api -using-.net-framework-4)有帮助吗? – 2013-03-10 16:31:21