Книга: ЯЗЫК ПРОГРАММИРОВАНИЯ С# 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;
}
- 4.2. ОПЕРАЦИИ НАД СТРУКТУРАМИ ДАННЫХ
- Доступ к элементу структуры при помощи указателя
- Доступ к пользовательским типам Web-методов
- Доступ к типам DataSet ADO.NET
- Что делать, если при установке принтера появляется сообщение Невозможно завершение операции. Подсистема печати недоступн...
- 9.4. Права доступа к squid
- Глава 29 Доступ к канальному уровню
- 10.5. Транзакции и пути доступа меню
- Настройка доступа пользователей к рабочей книге
- 3.5 Проблемы доступа при использовании нескольких протоколов
- Доступ к существующим рабочим областям для документов
- Есть ли быстрый способ доступа к папкам?