Поделиться через


Как указать имя альтернативного элемента для потока XML

Пример кода

Используя XmlSerializer, можно создать несколько потоков XML с одним и тем же набором классов. Это может понадобиться, поскольку для двух разных XML-веб-служб требуется одинаковая основная информация с незначительными различиями. Допустим, две XML-веб-службы обрабатывают заказы на книги, и поэтому для каждой из них требуются номера ISBN. Одна служба использует тег <ISBN>, а другая — тег <BookID>. Имеется класс с именем Book, содержащий поле с именем ISBN. При сериализации экземпляра класса Book имя члена (ISBN) будет по умолчанию использоваться в качестве имени элемента для тега. Первая XML-веб-служба работает, как и предполагалось. Но чтобы отправить поток XML во вторую XML-веб-службу, необходимо переопределить сериализацию, чтобы именем элемента для тега стало BookID.

Создание потока XML с именем альтернативного элемента

  1. Создайте экземпляр класса XmlElementAttribute.

  2. Задайте ElementName атрибута XmlElementAttribute как "BookID".

  3. Создайте экземпляр класса XmlAttributes.

  4. Добавьте объект XmlElementAttribute в коллекцию, доступ к которой осуществляется через свойство XmlElements атрибута XmlAttributes.

  5. Создайте экземпляр класса XmlAttributeOverrides.

  6. Добавьте XmlAttributes к XmlAttributeOverrides, передавая тип переопределяемого объекта и имя переопределяемого члена.

  7. Создайте экземпляр класса XmlSerializer с XmlAttributeOverrides.

  8. Создайте экземпляр класса 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

Другие ресурсы

XML- и SOAP-сериализация

Дата сборки: 2010-03-10