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


Практическое руководство. Указание альтернативного имени элемента для 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. Добавьте объект к коллекции, доступ к которой осуществляется через свойство XmlElementsXmlAttributes.

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

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

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

  8. Создайте экземпляр Book класса и сериализуйте или десериализируйте его.

Example

Public Function 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 void 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>

См. также