Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
XmlSerializerС помощью этого потока можно создать несколько XML-потоков с одним набором классов. Это может потребоваться, так как для двух разных веб-служб XML требуется одна и та же базовая информация, с небольшими различиями. Например, представьте себе две веб-службы XML, обрабатывающие заказы на книги, и поэтому оба требуют номера ISBN. Одна служба использует тег <ISBN> , а второй использует тег <BookID>. У вас есть класс с именем Book , который содержит поле с именем ISBN. При сериализации экземпляра Book класса он будет по умолчанию использовать имя члена (ISBN) в качестве имени элемента тега. Для первой веб-службы XML это как ожидалось. Но чтобы отправить XML-поток во вторую веб-службу XML, необходимо переопределить сериализацию, чтобы имя элемента тега было BookID.
Создание XML-потока с альтернативным именем элемента
Создайте экземпляр XmlElementAttribute класса.
Установите ElementName из XmlElementAttribute на "BookID".
Создайте экземпляр XmlAttributes класса.
Добавьте объект к коллекции, доступ к которой осуществляется через свойство XmlElementsXmlAttributes.
Создайте экземпляр XmlAttributeOverrides класса.
Добавьте
XmlAttributesв XmlAttributeOverrides, указав тип объекта для переопределения и имя члена, который переопределяется.Создайте экземпляр класса
XmlSerializerс помощьюXmlAttributeOverrides.Создайте экземпляр
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>