Как указать имя альтернативного элемента для потока XML
Пример кода
Используя XmlSerializer, можно создать несколько потоков XML с одним и тем же набором классов. Это может понадобиться, поскольку для двух разных XML-веб-служб требуется одинаковая основная информация с незначительными различиями. Допустим, две XML-веб-службы обрабатывают заказы на книги, и поэтому для каждой из них требуются номера ISBN. Одна служба использует тег <ISBN>, а другая — тег <BookID>. Имеется класс с именем Book
, содержащий поле с именем ISBN
. При сериализации экземпляра класса Book
имя члена (ISBN) будет по умолчанию использоваться в качестве имени элемента для тега. Первая XML-веб-служба работает, как и предполагалось. Но чтобы отправить поток XML во вторую XML-веб-службу, необходимо переопределить сериализацию, чтобы именем элемента для тега стало BookID
.
Создание потока XML с именем альтернативного элемента
Создайте экземпляр класса XmlElementAttribute.
Задайте ElementName атрибута XmlElementAttribute как "BookID".
Создайте экземпляр класса XmlAttributes.
Добавьте объект XmlElementAttribute в коллекцию, доступ к которой осуществляется через свойство XmlElements атрибута XmlAttributes.
Создайте экземпляр класса XmlAttributeOverrides.
Добавьте XmlAttributes к XmlAttributeOverrides, передавая тип переопределяемого объекта и имя переопределяемого члена.
Создайте экземпляр класса XmlSerializer с XmlAttributeOverrides.
Создайте экземпляр класса
Book
, сериализуйте или десериализуйте его.
Примеры
Public Class SerializeOverride()
' Creates an XmlElementAttribute with the alternate name.
Dim myElementAttribute As XmlElementAttribute = _
New XmlElementAttribute()
myElementAttribute.ElementName = "BookID"
Dim myAttributes As XmlAttributes = New XmlAttributes()
myAttributes.XmlElements.Add(myElementAttribute)
Dim myOverrides As XmlAttributeOverrides = New XmlAttributeOverrides()
myOverrides.Add(typeof(Book), "ISBN", myAttributes)
Dim mySerializer As XmlSerializer = _
New XmlSerializer(GetType(Book), myOverrides)
Dim b As Book = New Book()
b.ISBN = "123456789"
' Creates a StreamWriter to write the XML stream to.
Dim writer As StreamWriter = New StreamWriter("Book.xml")
mySerializer.Serialize(writer, b);
End Class
public class SerializeOverride()
{
// Creates an XmlElementAttribute with the alternate name.
XmlElementAttribute myElementAttribute = new XmlElementAttribute();
myElementAttribute.ElementName = "BookID";
XmlAttributes myAttributes = new XmlAttributes();
myAttributes.XmlElements.Add(myElementAttribute);
XmlAttributeOverrides myOverrides = new XmlAttributeOverrides();
myOverrides.Add(typeof(Book), "ISBN", myAttributes);
XmlSerializer mySerializer =
new XmlSerializer(typeof(Book), myOverrides)
Book b = new Book();
b.ISBN = "123456789"
// Creates a StreamWriter to write the XML stream to.
StreamWriter writer = new StreamWriter("Book.xml");
mySerializer.Serialize(writer, b);
}
Поток XML может иметь следующий вид.
<Book>
<BookID>123456789</BookID>
</Book>
См. также
Задачи
Как сериализовать объект
Как десериализовать объект
Как десериализовать объект
Справочник
XmlSerializer
XmlElementAttribute
XmlAttributes
XmlAttributeOverrides
Другие ресурсы
Дата сборки: 2010-03-10