Instrukcje: Określanie alternatywnej nazwy elementu dla strumienia XML
Przy użyciu XmlSerializer, można wygenerować więcej niż jeden strumień XML z tym samym zestawem klas. Można to zrobić, ponieważ na tym samym podstawowe informacje o różnice tylko nieznaczne wymaga dwóch różnych usług sieci Web XML. Załóżmy na przykład, że dwie usługi sieci Web XML przetwarzają zamówienia książek, a w związku z tym obie wymagają numerów ISBN. Jedna usługa używa tagu <ISBN> , podczas gdy drugi używa tagu <BookID>. Masz klasę o nazwie Book
zawiera pole o nazwie ISBN
. Jeśli wystąpienie Book
klasy jest serializowane, będzie domyślnie używać nazwy składowej (ISBN) jako nazwy elementu tag. W przypadku pierwszego usługi sieci Web XML jest zgodnie z oczekiwaniami. Ale wysyłania strumień XML do drugiego usługi sieci Web XML, konieczne jest przesłonięcie serializacji tak, aby nazwy elementu znacznika BookID
.
Aby utworzyć strumień XML zawierających nazwę elementu alternatywny
Utworzenie wystąpienia XmlElementAttribute klasy.
Ustaw ElementName z XmlElementAttribute do "BookID".
Utworzenie wystąpienia XmlAttributes klasy.
Dodaj
XmlElementAttribute
do kolekcji udostępniane za pośrednictwem XmlElements właściwości XmlAttributes .Utworzenie wystąpienia XmlAttributeOverrides klasy.
Dodaj
XmlAttributes
do XmlAttributeOverrides, przekazując typ obiektu do zastępowania i nazwę elementu zastępowaniu.Utworzenie wystąpienia
XmlSerializer
klasy zXmlAttributeOverrides
.Utworzenie wystąpienia
Book
klasy, a serializacji lub deserializacji go.
Przykład
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);
}
Strumień XML może wyglądać w następujący sposób.
<Book>
<BookID>123456789</BookID>
</Book>