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

  1. Utworzenie wystąpienia XmlElementAttribute klasy.

  2. Ustaw ElementName z XmlElementAttribute do "BookID".

  3. Utworzenie wystąpienia XmlAttributes klasy.

  4. Dodaj XmlElementAttribute do kolekcji udostępniane za pośrednictwem XmlElements właściwości XmlAttributes .

  5. Utworzenie wystąpienia XmlAttributeOverrides klasy.

  6. Dodaj XmlAttributes do XmlAttributeOverrides, przekazując typ obiektu do zastępowania i nazwę elementu zastępowaniu.

  7. Utworzenie wystąpienia XmlSerializer klasy z XmlAttributeOverrides.

  8. 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>  

Zobacz też