Практическое руководство. Указание имени альтернативного элемента для потока XMLHow to: Specify an Alternate Element Name for an XML Stream

Используя XmlSerializer, можно создать несколько потоков XML с одним и тем же набором классов.Using the XmlSerializer, you can generate more than one XML stream with the same set of classes. Это может понадобиться, поскольку для двух разных XML-веб-служб требуется одинаковая основная информация с незначительными различиями.You might want to do this because two different XML Web services require the same basic information, with only slight differences. Допустим, две веб-службы XML обрабатывают заказы на книги, и поэтому для каждой из них требуются номера ISBN.For example, imagine two XML Web services that process orders for books, and thus both require ISBN numbers. Одна служба использует тег <ISBN>, а другая — тег <BookID>.One service uses the tag <ISBN> while the second uses the tag <BookID>. Имеется класс с именем Book, содержащий поле с именем ISBN.You have a class named Book that contains a field named ISBN. При сериализации экземпляра класса Book имя члена (ISBN) будет по умолчанию использоваться в качестве имени элемента для тега.When an instance of the Book class is serialized, it will, by default, use the member name (ISBN) as the tag element name. Первая XML-веб-служба работает, как и предполагалось.For the first XML Web service, this is as expected. Но чтобы отправить поток XML во вторую XML-веб-службу, необходимо переопределить сериализацию, чтобы именем элемента для тега стало BookID.But to send the XML stream to the second XML Web service, you must override the serialization so that the tag's element name is BookID.

Создание потока XML с именем альтернативного элементаTo create an XML stream with an alternate element name

  1. Создайте экземпляр класса XmlElementAttribute.Create an instance of the XmlElementAttribute class.

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

  3. Создайте экземпляр класса XmlAttributes.Create an instance of the XmlAttributes class.

  4. Добавьте объект XmlElementAttribute в коллекцию, доступ к которой осуществляется через свойство XmlElements атрибута XmlAttributes.Add the XmlElementAttribute object to the collection accessed through the XmlElements property of XmlAttributes .

  5. Создайте экземпляр класса XmlAttributeOverrides.Create an instance of the XmlAttributeOverrides class.

  6. Добавьте XmlAttributes к XmlAttributeOverrides, передавая тип переопределяемого объекта и имя переопределяемого члена.Add the XmlAttributes to the XmlAttributeOverrides, passing the type of the object to override and the name of the member being overridden.

  7. Создайте экземпляр класса XmlSerializer с XmlAttributeOverrides.Create an instance of the XmlSerializer class with XmlAttributeOverrides.

  8. Создайте экземпляр класса Book, сериализуйте или десериализуйте его.Create an instance of the Book class, and serialize or deserialize it.

ПримерExample

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 может иметь следующий вид.The XML stream might resemble the following.

<Book>  
    <BookID>123456789</BookID>  
</Book>  

См. такжеSee also