#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 #.