2016-06-06 7 views
0

ich eine XML-Zeichenfolge resposne haben, die wie folgt aussieht:Ärger Deserialisieren XML in C# Objekt

<?xml version="1.0" encoding="UTF-8"?> 
<Response ResponseReference="REF_D_026_145-2601465218898798"> 
    <ResponseDetails Language="en"> 
     <SearchHotelPriceResponse> 
      <HotelDetails> 
       <Hotel HasExtraInfo="true" HasMap="true" HasPictures="true"> 
        <City Code="LON"> 
         <![CDATA[London]]> 
        </City> 
        <Item Code="IBI3"> 
         <![CDATA[IBIS EXCEL]]> 
        </Item> 
        <LocationDetails> 
         <Location Code="G9"> 
          <![CDATA[Outside Centre]]> 
         </Location> 
         <Location Code="01"> 
          <![CDATA[Docklands]]> 
         </Location> 
        </LocationDetails> 
        <StarRating>3</StarRating> 
        <HotelRooms> 
         <HotelRoom Code="DB" NumberOfRooms="1"/> 
        </HotelRooms> 
        <RoomCategories> 
         <RoomCategory Id="001:IBI3:17082:S16700:22530:91760"> 
          <Description> 
           <![CDATA[Standard Twin]]> 
          </Description> 
          <ItemPrice CommissionPercentage="0.00" Currency="USD">1870.00</ItemPrice> 
          <Confirmation Code="IM"> 
           <![CDATA[AVAILABLE]]> 
          </Confirmation> 
          <Meals> 
           <Basis Code="B"> 
            <![CDATA[Breakfast]]> 
           </Basis> 
           <Breakfast Code="F"> 
            <![CDATA[Full]]> 
           </Breakfast> 
          </Meals> 
          <HotelRoomPrices> 
           <HotelRoom Code="DB"> 
            <RoomPrice Gross="1870.00"/> 
            <PriceRanges> 
             <PriceRange> 
              <DateRange> 
               <FromDate>2016-07-30</FromDate> 
               <ToDate>2016-08-02</ToDate> 
              </DateRange> 
              <Price Gross="467.50" Nights="4"/> 
             </PriceRange> 
            </PriceRanges> 
           </HotelRoom> 
          </HotelRoomPrices> 
          <ChargeConditions> 
           <ChargeCondition Type="cancellation"> 
            <Condition Charge="true" ChargeAmount="1870.00" Currency="USD" FromDay="0" ToDay="0"/> 
            <Condition Charge="true" ChargeAmount="467.50" Currency="USD" FromDay="1" ToDay="2"/> 
            <Condition Charge="false" FromDay="3"/> 
           </ChargeCondition> 
           <ChargeCondition Type="amendment"> 
            <Condition Charge="false" FromDay="0"/> 
           </ChargeCondition> 
           <PassengerNameChange Allowable="true"/> 
          </ChargeConditions> 
         </RoomCategory> 
         <RoomCategory Id="001:IBI3:17082:S16700:22530:91737"> 
          <Description> 
           <![CDATA[Standard Triple]]> 
          </Description> 
          <ItemPrice CommissionPercentage="0.00" Currency="USD">2804.00</ItemPrice> 
          <Confirmation Code="IM"> 
           <![CDATA[AVAILABLE]]> 
          </Confirmation> 
          <Meals> 
           <Basis Code="B"> 
            <![CDATA[Breakfast]]> 
           </Basis> 
           <Breakfast Code="F"> 
            <![CDATA[Full]]> 
           </Breakfast> 
          </Meals> 
          <HotelRoomPrices> 
           <HotelRoom Code="DB"> 
            <RoomPrice Gross="2804.00"/> 
            <PriceRanges> 
             <PriceRange> 
              <DateRange> 
               <FromDate>2016-07-30</FromDate> 
               <ToDate>2016-08-02</ToDate> 
              </DateRange> 
              <Price Gross="701.00" Nights="4"/> 
             </PriceRange> 
            </PriceRanges> 
           </HotelRoom> 
          </HotelRoomPrices> 
          <ChargeConditions> 
           <ChargeCondition Type="cancellation"> 
            <Condition Charge="true" ChargeAmount="2804.00" Currency="USD" FromDay="0" ToDay="0"/> 
            <Condition Charge="true" ChargeAmount="701.00" Currency="USD" FromDay="1" ToDay="2"/> 
            <Condition Charge="false" FromDay="3"/> 
           </ChargeCondition> 
           <ChargeCondition Type="amendment"> 
            <Condition Charge="false" FromDay="0"/> 
           </ChargeCondition> 
           <PassengerNameChange Allowable="true"/> 
          </ChargeConditions> 
         </RoomCategory> 
        </RoomCategories> 
       </Hotel> 
      </HotelDetails> 
     </SearchHotelPriceResponse> 
    </ResponseDetails> 
</Response> 

Und ich die Klasse I Tring ich diese Antwort wie folgt aussieht deserialisieren:

using System.Collections.Generic; 
using System.Xml.Serialization; 

namespace example 
{ 
    [XmlRoot(ElementName = "Response")] 
    public class GTASearchResponse 
    { 
     [XmlElement(ElementName = "Response")] 
     public Response response { get; set; } 
    } 

    [XmlRoot(ElementName = "City")] 
    public class City 
    { 
     [XmlAttribute(AttributeName = "Code")] 
     public string Code { get; set; } 
     [XmlText] 
     public string Text { get; set; } 
    } 

    [XmlRoot(ElementName = "Item")] 
    public class Item 
    { 
     [XmlAttribute(AttributeName = "Code")] 
     public string Code { get; set; } 
     [XmlText] 
     public string Text { get; set; } 
    } 

    [XmlRoot(ElementName = "Location")] 
    public class Location 
    { 
     [XmlAttribute(AttributeName = "Code")] 
     public string Code { get; set; } 
     [XmlText] 
     public string Text { get; set; } 
    } 

    [XmlRoot(ElementName = "LocationDetails")] 
    public class LocationDetails 
    { 
     [XmlElement(ElementName = "Location")] 
     public List<Location> Location { get; set; } 
    } 

    [XmlRoot(ElementName = "HotelRoom")] 
    public class HotelRoom 
    { 
     [XmlAttribute(AttributeName = "Code")] 
     public string Code { get; set; } 
     [XmlAttribute(AttributeName = "NumberOfRooms")] 
     public string NumberOfRooms { get; set; } 
     [XmlElement(ElementName = "RoomPrice")] 
     public RoomPrice RoomPrice { get; set; } 
     [XmlElement(ElementName = "PriceRanges")] 
     public PriceRanges PriceRanges { get; set; } 
    } 

    [XmlRoot(ElementName = "HotelRooms")] 
    public class HotelRooms 
    { 
     [XmlElement(ElementName = "HotelRoom")] 
     public HotelRoom HotelRoom { get; set; } 
    } 

    [XmlRoot(ElementName = "ItemPrice")] 
    public class ItemPrice 
    { 
     [XmlAttribute(AttributeName = "CommissionPercentage")] 
     public string CommissionPercentage { get; set; } 
     [XmlAttribute(AttributeName = "Currency")] 
     public string Currency { get; set; } 
     [XmlText] 
     public string Text { get; set; } 
    } 

    [XmlRoot(ElementName = "Confirmation")] 
    public class Confirmation 
    { 
     [XmlAttribute(AttributeName = "Code")] 
     public string Code { get; set; } 
     [XmlText] 
     public string Text { get; set; } 
    } 

    [XmlRoot(ElementName = "Basis")] 
    public class Basis 
    { 
     [XmlAttribute(AttributeName = "Code")] 
     public string Code { get; set; } 
     [XmlText] 
     public string Text { get; set; } 
    } 

    [XmlRoot(ElementName = "Breakfast")] 
    public class Breakfast 
    { 
     [XmlAttribute(AttributeName = "Code")] 
     public string Code { get; set; } 
     [XmlText] 
     public string Text { get; set; } 
    } 

    [XmlRoot(ElementName = "Meals")] 
    public class Meals 
    { 
     [XmlElement(ElementName = "Basis")] 
     public Basis Basis { get; set; } 
     [XmlElement(ElementName = "Breakfast")] 
     public Breakfast Breakfast { get; set; } 
    } 

    [XmlRoot(ElementName = "RoomPrice")] 
    public class RoomPrice 
    { 
     [XmlAttribute(AttributeName = "Gross")] 
     public string Gross { get; set; } 
    } 

    [XmlRoot(ElementName = "DateRange")] 
    public class DateRange 
    { 
     [XmlElement(ElementName = "FromDate")] 
     public string FromDate { get; set; } 
     [XmlElement(ElementName = "ToDate")] 
     public string ToDate { get; set; } 
    } 

    [XmlRoot(ElementName = "Price")] 
    public class Price 
    { 
     [XmlAttribute(AttributeName = "Gross")] 
     public string Gross { get; set; } 
     [XmlAttribute(AttributeName = "Nights")] 
     public string Nights { get; set; } 
    } 

    [XmlRoot(ElementName = "PriceRange")] 
    public class PriceRange 
    { 
     [XmlElement(ElementName = "DateRange")] 
     public DateRange DateRange { get; set; } 
     [XmlElement(ElementName = "Price")] 
     public Price Price { get; set; } 
    } 

    [XmlRoot(ElementName = "PriceRanges")] 
    public class PriceRanges 
    { 
     [XmlElement(ElementName = "PriceRange")] 
     public PriceRange PriceRange { get; set; } 
    } 

    [XmlRoot(ElementName = "HotelRoomPrices")] 
    public class HotelRoomPrices 
    { 
     [XmlElement(ElementName = "HotelRoom")] 
     public HotelRoom HotelRoom { get; set; } 
    } 

    [XmlRoot(ElementName = "Condition")] 
    public class Condition 
    { 
     [XmlAttribute(AttributeName = "Charge")] 
     public string Charge { get; set; } 
     [XmlAttribute(AttributeName = "ChargeAmount")] 
     public string ChargeAmount { get; set; } 
     [XmlAttribute(AttributeName = "Currency")] 
     public string Currency { get; set; } 
     [XmlAttribute(AttributeName = "FromDay")] 
     public string FromDay { get; set; } 
     [XmlAttribute(AttributeName = "ToDay")] 
     public string ToDay { get; set; } 
    } 

    [XmlRoot(ElementName = "ChargeCondition")] 
    public class ChargeCondition 
    { 
     [XmlElement(ElementName = "Condition")] 
     public List<Condition> Condition { get; set; } 
     [XmlAttribute(AttributeName = "Type")] 
     public string Type { get; set; } 
    } 

    [XmlRoot(ElementName = "PassengerNameChange")] 
    public class PassengerNameChange 
    { 
     [XmlAttribute(AttributeName = "Allowable")] 
     public string Allowable { get; set; } 
    } 

    [XmlRoot(ElementName = "ChargeConditions")] 
    public class ChargeConditions 
    { 
     [XmlElement(ElementName = "ChargeCondition")] 
     public List<ChargeCondition> ChargeCondition { get; set; } 
     [XmlElement(ElementName = "PassengerNameChange")] 
     public PassengerNameChange PassengerNameChange { get; set; } 
    } 

    [XmlRoot(ElementName = "RoomCategory")] 
    public class RoomCategory 
    { 
     [XmlElement(ElementName = "Description")] 
     public string Description { get; set; } 
     [XmlElement(ElementName = "ItemPrice")] 
     public ItemPrice ItemPrice { get; set; } 
     [XmlElement(ElementName = "Confirmation")] 
     public Confirmation Confirmation { get; set; } 
     [XmlElement(ElementName = "Meals")] 
     public Meals Meals { get; set; } 
     [XmlElement(ElementName = "HotelRoomPrices")] 
     public HotelRoomPrices HotelRoomPrices { get; set; } 
     [XmlElement(ElementName = "ChargeConditions")] 
     public ChargeConditions ChargeConditions { get; set; } 
     [XmlAttribute(AttributeName = "Id")] 
     public string Id { get; set; } 
    } 

    [XmlRoot(ElementName = "RoomCategories")] 
    public class RoomCategories 
    { 
     [XmlElement(ElementName = "RoomCategory")] 
     public List<RoomCategory> RoomCategory { get; set; } 
    } 

    [XmlRoot(ElementName = "Hotel")] 
    public class Hotel 
    { 
     [XmlElement(ElementName = "City")] 
     public City City { get; set; } 
     [XmlElement(ElementName = "Item")] 
     public Item Item { get; set; } 
     [XmlElement(ElementName = "LocationDetails")] 
     public LocationDetails LocationDetails { get; set; } 
     [XmlElement(ElementName = "StarRating")] 
     public string StarRating { get; set; } 
     [XmlElement(ElementName = "HotelRooms")] 
     public HotelRooms HotelRooms { get; set; } 
     [XmlElement(ElementName = "RoomCategories")] 
     public RoomCategories RoomCategories { get; set; } 
     [XmlAttribute(AttributeName = "HasExtraInfo")] 
     public string HasExtraInfo { get; set; } 
     [XmlAttribute(AttributeName = "HasMap")] 
     public string HasMap { get; set; } 
     [XmlAttribute(AttributeName = "HasPictures")] 
     public string HasPictures { get; set; } 
    } 

    [XmlRoot(ElementName = "HotelDetails")] 
    public class HotelDetails 
    { 
     [XmlElement(ElementName = "Hotel")] 
     public Hotel Hotel { get; set; } 
    } 

    [XmlRoot(ElementName = "SearchHotelPriceResponse")] 
    public class SearchHotelPriceResponse 
    { 
     [XmlElement(ElementName = "HotelDetails")] 
     public HotelDetails HotelDetails { get; set; } 
    } 

    [XmlRoot(ElementName = "ResponseDetails")] 
    public class ResponseDetails 
    { 
     [XmlElement(ElementName = "SearchHotelPriceResponse")] 
     public SearchHotelPriceResponse SearchHotelPriceResponse { get; set; } 
     [XmlAttribute(AttributeName = "Language")] 
     public string Language { get; set; } 
    } 

    [XmlRoot(ElementName = "Response")] 
    public class Response 
    { 
     [XmlElement(ElementName = "ResponseDetails")] 
     public ResponseDetails ResponseDetails { get; set; } 
     [XmlAttribute(AttributeName = "ResponseReference")] 
     public string ResponseReference { get; set; } 
    } 
} 

leider, wenn ich deserialisieren ich einen Nullwert für ein untergeordnetes Element des Ansprechverhaltens erhalten, sieht Visual Studio wie folgt aus, wenn ich debuggen:

enter image description here

Sie können sehen, wenn ich die Variable Antwort aufpassen, dann bekomme ich nur eine Null-Antwort-Klasse zurück. Hilfe?

+0

versuchen, deserialize restResponse.Content. lass uns wissen, was du bekommst – skalinkin

+0

hi! der Rest scharfe Deserialisierung akzeptiert keine Zeichenfolge als Argument –

+1

Von den Xml-Attributen in GTASearchResponse sieht es so aus, als ob Sie ein Schema " ..." erwarten, da es die Stamm- und die Attributantwort gibt. Ich denke, wenn Sie Ihren Inhalt direkt in den "Response" -Typ deserialisieren, könnte es funktionieren. –

Antwort

0

aus der XML-Attribute auf GTASearchResponse sieht es aus wie Sie ein Schema

<response><response> ... 

, weil es ist die Wurzel und das Attribut Antwort erwarten. Ich denke, wenn Sie gerade Ihren Inhalt direkt zu "Antwort" Typ deserialisieren, könnte es funktionieren