HOW TO:指定 XML 資料流的替代元素名稱
使用 XmlSerializer,以相同類別集,可產生一個以上的 XML 資料流。 當兩個不同的 XML Web 服務要求相同的基本資訊以及些微差異時,您也許會想這麼做。 例如,試想有兩家處理書本訂單的 XML Web 服務,而且都需要 ISBN 號碼。 一個服務使用標籤 <ISBN>,另一個則使用標籤 <BookID>。 您有名為 Book
的類別,其中包含名為 ISBN
的欄位。 當 Book
類別的執行個體序列化時,它會根據預設使用成員名稱 (ISBN) 做為標記項目名稱。 對於第一個 XML Web 服務,這正如預期。 不過要想要傳送 XML 資料流至第二個 XML Web 服務,您必須覆寫序列化,讓標記的項目名稱為 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>