I'm working on parsing XML returned from a web service call. This is a sample of the returned XML (the actually result is much larger):
I am attempting to parse it into this class
I have this function which should accomplish this:
Then when I try and test it with this test page (page load event):
I get the following error
Unable to cast object of type 'WhereSelectEnu merableIterator `2[System.Xml.Linq .XElement,Lodgx .Classes.Models .RoomRate]' to type 'System.Collect ions.Generic.IE numerable`1[Lodgx.Classes.M odels.RoomRate][]'.
Can someone tell me
Code:
?xml version="1.0" encoding="utf-16"?> <HotelPropertyDescriptionRS xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" TimeStamp="2013-12-30T18:49:36" Version="1.14.1"> <Success xmlns="http://webservices.sabre.com/sabreXML/2003/07" /> <RoomStay xmlns="http://webservices.sabre.com/sabreXML/2003/07"> <RoomRates> <RoomRate GuaranteeSurchargeRequired="G" IATACharacteristicIdentification="BGGO00" IATAProductIdentification="BLOOMBERG" RPH="001"> <AdditionalInfo> <CancelPolicy Numeric="06" /> <Commission NonCommission="true">NON COMMISSIONABLE</Commission> <Text>BLOOMBERG LP, 0.0 KM, INCLUDES BREAKFAST, INTERNET, WIFI, SEE</Text> <Text>RATE RULES DELUXE ROOM, GUEST ROOM, 1 KING OR 2 TWIN/SINGLE BE</Text> </AdditionalInfo> <Rates> <Rate Amount="66.600" CurrencyCode="KWD"> <AdditionalGuestAmounts> <AdditionalGuestAmount MaxExtraPersonsAllowed="0"> <Charges ExtraPerson="0" /> </AdditionalGuestAmount> </AdditionalGuestAmounts> <HotelTotalPricing Amount="76.590"> <Disclaimer>INCLUDES TAXES AND SURCHARGES</Disclaimer> <TotalSurcharges Amount="9.990" /> </HotelTotalPricing> </Rate> </Rates> </RoomRate> ...
Code:
Namespace Classes.Models Public Class RoomRate Public Property Rate() As String Public Property Surcharge() As String Public Property TotalPrice() As String Public Property CurrencyCode() As String Public Property CancellationPolicy() As String Public Property Disclaimer() As String Public Property Text() As List(Of String) Public Property Commission() As String Public Property GuaranteeSurchargeRequired() As String Public Property IATACharacteristicIdentification() As String Public Property IATAProductIdentification() As String Public Property RPH() As String End Class End Namespace
Code:
Public Function ParseRates() As IEnumerable(Of RoomRate) Try Return From el As XElement In _xDoc...<RoomRate> Select New RoomRate With { _ .GuaranteeSurchargeRequired = el.@GuaranteeSurchargeRequired, _ .IATACharacteristicIdentification = el.@IATACharacteristicIdentification, _ .IATAProductIdentification = el.@IATAProductIdentification, _ .RPH = el.@RPH, _ .CancellationPolicy = el...<AdditionalInfo>...<CancellationPolicy>.@Numeric, _ .Commission = el...<AdditionalInfo>...<Commission>.@NonCommission, _ .Rate = el...<Rates>...<Rate>.@Amount, _ .CurrencyCode = el...<Rates>...<Rate>.@CurrencyCode, _ .TotalPrice = el...<Rates>...<Rate>...<HotelTotalPricing>.@Amount, _ .Surcharge = el...<Rates>...<Rate>...<TotalSurchjarges>.@Amount} Catch ex As Exception ErrorMessage = ex.Message Return Nothing End Try End Function
Code:
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load Dim parse As New ParseSabre(Server.MapPath("~/XML/SabreSample.xml")) Dim rates As IEnumerable(Of RoomRate)() rates = parse.ParseRates() 'If rates = Nothing Then 'End If For Each rate As RoomRate In rates Response.Write(rate.GuaranteeSurchargeRequired) Response.Write(rate.IATACharacteristicIdentification) Response.Write(rate.IATAProductIdentification) Response.Write(rate.RPH) Response.Write(rate.CancellationPolicy) Response.Write(rate.Commission) Response.Write(rate.Rate) Response.Write(rate.CurrencyCode) Response.Write(rate.TotalPrice) Response.Write(rate.Surcharge) Response.Write(vbNewLine) Next End Sub
Unable to cast object of type 'WhereSelectEnu merableIterator `2[System.Xml.Linq .XElement,Lodgx .Classes.Models .RoomRate]' to type 'System.Collect ions.Generic.IE numerable`1[Lodgx.Classes.M odels.RoomRate][]'.
Can someone tell me
- Is my code for parsing going to accomplish what I'm looking for?
- How can I get rid of that error so I can continue to test this?
Comment