방법: XML 스트림의 대체 요소 이름 지정
XmlSerializer를 사용하면 동일한 클래스 집합을 가진 XML 스트림을 두 개 이상 생성할 수 있습니다. 두 개의 서로 다른 XML Web services에 약간만 다른 동일한 기본 정보가 필요한 경우 이런 작업이 필요할 수 있습니다. 예를 들어 책 주문을 처리하기 때문에 둘 모두에 ISBN 번호가 필요한 두 개의 XML Web services를 가정해 보겠습니다. 한 서비스는 <ISBN> 태그를 사용하고 다른 서비스는 <BookID> 태그를 사용합니다. Book
이라는 필드가 포함된 ISBN
이라는 클래스가 있습니다. Book
클래스의 인스턴스가 serialize될 때 기본적으로 멤버 이름(ISBN)을 태그 요소 이름으로 사용합니다. 첫 번째 XML Web services의 경우에는 예상된 동작입니다. 하지만 XML 스트림을 두 번째 XML Web services로 전송하려면 태그의 요소 이름이 BookID
가 되도록 serialization을 재정의해야 합니다.
대체 요소 이름을 사용하여 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>
참고 항목
.NET