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