asp.net веб-службы, возвращающие пустой объект

#c# #.net #xml #web-services #xsd

#c# #.net #xml #веб-службы #xsd

Вопрос:

У меня есть файл XSD, который определяет схему, с помощью которой мой движок может взаимодействовать с другими плагинами (написанными на разных языках, таких как Delphi). Я использовал инструмент XSD, предоставленный .Net, чтобы получить класс C # из файла XSD.

Плагины возвращают строку XML, которую я затем де-сериализую в класс, созданный инструментом XSD.

До сих пор все в порядке, однако, когда я передаю массив класса через веб-службу клиенту, массив содержит один элемент, и это нормально, но каждое поле в этом объекте либо равно нулю, либо имеет значение по умолчанию.

Есть идеи, почему это может происходить?

Я также попытался отправить фиктивные данные вместо обычного извлечения данных из плагина, но все равно возвращаемый объект пуст.

Это класс, созданный инструментом XSD:

 using System.Xml.Serialization;


/// <remarks/>
[System.Xml.Serialization.XmlRootAttribute(Namespace="", IsNullable=false)]
public class BookingQueryResponse {

    /// <remarks/>
    public int ErrorCode;

    /// <remarks/>
    public string ErrorString;

    /// <remarks/>
    public int BookingQueryID;

    /// <remarks/>
    public int DestinationID;

    /// <remarks/>
    public string DestinationName;

    /// <remarks/>
    [System.Xml.Serialization.XmlElementAttribute(DataType="date")]
    public System.DateTime ArrivalDate;

    /// <remarks/>
    [System.Xml.Serialization.XmlElementAttribute(DataType="date")]
    public System.DateTime DepartureDate;

    /// <remarks/>
    public int CurrencyID;

    /// <remarks/>
    public string CurrencyISO;

    /// <remarks/>
    public string CurrencySymbol;

    /// <remarks/>
    public int LangID;

    /// <remarks/>
    public string LangCode;

    /// <remarks/>
    [System.Xml.Serialization.XmlElementAttribute("HotelQuotePackages")]
    public HotelQuotePackage[] HotelQuotePackages;
}

/// <remarks/>
public class HotelQuotePackage {

    /// <remarks/>
    public string PackageGuid;

    /// <remarks/>
    public string PackageName;

    /// <remarks/>
    public string PluginGuid;

    /// <remarks/>
    public int ResortID;

    /// <remarks/>
    public string ResortName;

    /// <remarks/>
    public int HotelID;

    /// <remarks/>
    public string HotelName;

    /// <remarks/>
    public int HotelRatingID;

    /// <remarks/>
    public string HotelRatingName;

    /// <remarks/>
    public string HotelNarrative;

    /// <remarks/>
    public System.Double MapLongitude;

    /// <remarks/>
    public System.Double MapLatitude;

    /// <remarks/>
    public string HotelRemark;

    /// <remarks/>
    public string OfferText;

    /// <remarks/>
    [System.Xml.Serialization.XmlElementAttribute("HotelRoomQuotes")]
    public HotelRoomQuote[] HotelRoomQuotes;

    /// <remarks/>
    [System.Xml.Serialization.XmlElementAttribute("HotelImages")]
    public HotelMediaImage[] HotelImages;
}

/// <remarks/>
public class HotelRoomQuote {

    /// <remarks/>
    public int RoomNumber;

    /// <remarks/>
    [System.Xml.Serialization.XmlElementAttribute("RoomQuotes")]
    public RoomQuote[] RoomQuotes;
}

/// <remarks/>
public class RoomQuote {

    /// <remarks/>
    public string Guid;

    /// <remarks/>
    public int AdultPax;

    /// <remarks/>
    public int ChildPax;

    /// <remarks/>
    public int InfantPax;

    /// <remarks/>
    public string RoomTypeName;

    /// <remarks/>
    public string RoomTypeDesc;

    /// <remarks/>
    public int BoardBasisID;

    /// <remarks/>
    public string BoardBasisName;

    /// <remarks/>
    public System.Double CostForStay;

    /// <remarks/>
    public string Remarks;

    /// <remarks/>
    [System.Xml.Serialization.XmlElementAttribute("DayRates")]
    public DayRate[] DayRates;
}

/// <remarks/>
public class DayRate {

    /// <remarks/>
    [System.Xml.Serialization.XmlElementAttribute(DataType="date")]
    public System.DateTime Date;

    /// <remarks/>
    public System.Double Rate;
}

/// <remarks/>
public class HotelMediaImage {

    /// <remarks/>
    public string HotelImage;

    /// <remarks/>
    public int ImageTypeID;

    /// <remarks/>
    public string ImageType;
}
  

и только для целей тестирования веб-сервиса все, что я сделал, это:

 return return new BookingQueryResponse[1] { new BookingQueryResponse() { ArrivalDate = DateTime.Now.Date, DestinationName = "Malta" } };
  

Комментарии:

1. это звучит как несоответствие в xml и типах… трудно сказать без конкретики (т. Е. Как C #, так и xml)

2. посмотрите на ваше пространство имен objects (не пространство имен c #, а пространство имен xml, обозначенное атрибутом XMLType) в вашем сгенерированном классе и в вашем XML-файле, они должны совпадать!

3. @Marc Gravell Я отредактировал вопрос, чтобы включить сгенерированный класс c #, если это поможет.

4. @Jonny и что именно должен возвращать этот сервис в терминах xml или xsd?

5. служба должна вернуть массив BookingQueryResponse[]. Плагины выдают мне строку XML с требуемыми данными, но проблема не в этом, проблема заключается в передаче массива через веб-службу.

Ответ №1:

Пожалуйста, опубликуйте XSD. Поскольку ваши классы выглядят нормально, мое первоначальное обоснованное предположение заключается в том, что это несоответствие типа (пространства имен) между вашим XSD и вашим пространством имен C #.