Книга: ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание

Доступ к структурам

Доступ к структурам

Протокол SOAP позволяет передачу XML.предcтавлений пользовательских типов данных (таких как классы и структуры). Web-сервисы XML используют тип XmlSerializer для преобразования типа в XML-код (см. главу 17, где имеется более подробная информация по этому поводу). Напомним, что XmlSerializer:

• не выполняет сериализацию приватных данных: для сериализации используются только открытые поля и свойства;

• требует, чтобы каждый позволяющий сериализацию класс имел конструктор, заданный по умолчанию;

• не требует использования атрибута [Serializable].

С учетом сказанного, наш следующий Web-метод будет возвращать массив структур SalesInfoDetails, определенных следующим образом.

// Пользовательский тип.
public struct SalesInfoDetails {
 public string info;
 public DateTime dateExpired;
 public string Url;
}

Другим интересным моментом в отношении XmlSerializer является то, что этот тип позволяет осуществлять многослойный контроль представления типа. По умолчанию сериализация структуры SalesInfoDetails выполняется путем преобразования каждого поля данных поля в уникальный XML-элемент.

‹SalesInfoDetails›
 ‹info›Цены на Colt снижены на 50'%!‹/info›
 ‹dateExpired›2004-12-02T00:00:00.0000000-06:00‹/dateExpired›
 ‹Url›http://www.CarsRUs.com‹/Url›
‹/SalesInfoDetails›

Чтобы изменить поведение, предлагаемое по умолчанию, вы можете в определения своих типов добавить атрибуты, определенные в пространстве имен System.Xml.Serialization (снова см. главу 17).

public struct SalesInfoDetails {
 public string info;
 [XmlAttribute]
 public DateTime dateExpired;
 public string Url;
}

В результате будет получено следующее XML-представление данных.

‹SalesInfoDetails dateExpired="2004-12-02T00:00:00"›
 ‹info›Цены на Colt снижены на 50%!‹/info›
 ‹Url›http://www.CarsRUs.com‹/Url›
‹/SalesInfoDetails›

Реализация GetSalesInfoDetails() возвращает заполненный массив этой пользовательской структуры.

[WebMethod(Description="Get details of current sales")]
public SalesInfoDetails[] GetSalesInfoDetails() {
 SalesInfoDetails[] theInfo = new SalesInfoDetails[3];
 theInfo[0].info = "Цены на Colt снижены на 50%!";
 theInfo[0].dateExpired = DateTime.Parse("12/02/04");
 theInfo[0].Url = "http://www.CarsRUs.com";
 theInfo[1].info = "Все BMW комплектуются 8-канальным звуком";
 theInfo[1].dateExpired = DateTime.Parse("8/11/03");
 theInfo[1].Url = "http://www.Bmws4U.com";
 theInfo[2].info = "Caravan бесплатно… спросите у дилера!";
 theInfo[2].dateExpired = DateTime.Parse("12/01/09");
 theInfo[2].Url = "http://www.AllPinkVans.com";
 return theInfo;
}

Оглавление книги


Генерация: 1.794. Запросов К БД/Cache: 3 / 0
поделиться
Вверх Вниз