Microsoft는 직렬화된 데이터의 중요성을 인식하여 .NET 프레임워크에 System.Runtime.Serialization 및 System.Xml.Serialization 네임스페이스를 포함하여 직렬화 기능을 제공하고 사용자에게 자체 직렬화 메서드를 작성할 수 있는 기능을 제공합니다. . System.Xml.Serialization 네임스페이스는 개체를 XML 형식으로 직렬화하기 위한 기본 메서드를 제공합니다. 이 방법을 어떻게 사용하는지 살펴보겠습니다.
XML의 매력
직렬화된 XML(Serialized XML)은 저장이나 전송의 편의를 위해 객체의 공개 필드와 속성을 직렬 형식(여기서는 XML 형식)으로 저장하는 프로세스를 말합니다. 역직렬화는 직렬 상태 정보를 사용하여 개체를 직렬 XML 상태에서 원래 상태로 복원하는 프로세스입니다. 따라서 직렬화를 개체의 상태를 스트림이나 버퍼에 저장하는 방법으로 생각할 수 있습니다.
직렬화의 목적은 데이터 저장 및 데이터 변환입니다. 데이터 저장은 사용자 세션 전반에 걸쳐 데이터를 저장하는 것을 의미합니다. 애플리케이션이 닫히면 데이터가 저장되고(직렬화), 사용자가 돌아오면 데이터가 다시 로드됩니다(직렬화 해제). 데이터 변환은 데이터를 다른 시스템에서 이해할 수 있는 형식으로 변환하는 것을 의미합니다. 직렬화 및 XML을 사용하면 데이터 변환을 쉽게 수행할 수 있습니다.
개체의 데이터는 클래스, 메서드, 속성, 전용 형식, 배열일 수도 있고 System.Xml.XmlElement 또는 System.Xml.XmlAttribute 개체에 포함된 XML일 수도 있습니다.
System.Xml.Serialization 네임스페이스의 주요 클래스는 XmlSerializer입니다. 물론 이 네임스페이스에는 XML 및 SOAP의 다른 측면과 관련된 다른 클래스도 포함되어 있지만 여기서는 XmlSerializer 클래스에 중점을 둡니다.
XmlSerializer
XmlSerializer 클래스는 개체를 XML 파일로 직렬화하고 XML 문서를 개체로 역직렬화하는 메서드를 제공합니다. 또한 사용자는 개체를 XML로 변환하는 방법을 지정할 수 있습니다. 직렬화할 객체의 유형을 매개변수로 클래스 생성자에 전달할 수 있습니다. 다음 C# 코드에서는 생성자의 사용을 보여줍니다.
XmlSerializer ser = new XmlSerializer(typeof(objectToSerialize));
다음은 해당 VB.NET 코드입니다.
Dim ser As New XmlSerializer(GetType(objectToSerialize))
실제 직렬화 프로세스는 XmlSerializer 클래스의 Serialize 메서드에서 구현됩니다. 이 메서드를 사용하면 직렬화 중에 TextWriter, Stream 및 XmlWriter 개체를 호출할 수 있습니다. 다음 예제 코드는 이 메서드를 호출하는 방법을 보여줍니다. 이 예에서는 객체가 직렬화되어 로컬 디스크의 파일에 저장됩니다. 예제는 클래스 선언으로 시작하고 직렬화된 소스 코드가 이어집니다.
시스템 사용;
네임스페이스 BuilderSerialization {
공개 클래스 주소 {
공개 주소() {}
공개 문자열 Address1;
공개 문자열 Address2;
공개 문자열 도시;
공개 문자열 상태;
공개 문자열 Zip;
공개 문자열 국가;
} }
시스템 사용;
네임스페이스 BuilderSerialization {
공개 클래스 작성자 {
공개 작성자() { }
공개 문자열 FirstName;
공개 문자열 MiddleName;
공개 문자열 성;
공개 문자열 제목;
공개 문자열 성별;
공개 주소 AddressObject;
} }
네임스페이스 BuilderSerialization {
공개 수업 도서 {
공개 도서() { }
공개 문자열 제목;
공개 작성자 AuthorObject;
공개 문자열 ISBN;
공개 이중 RetailPrice;
공개 문자열 게시자;
}}
시스템 사용;
System.Xml.Serialization 사용;
System.IO 사용;
네임스페이스 BuilderSerialization {
클래스 테스트 클래스 {
정적 무효 Main(string[] args) {
책 BookObject = new Book();
XmlSerializer ser = new XmlSerializer(typeof(Book));
TextWriter 작가 = new StreamWriter("booktest.xml");
BookObject.Title = "실용적인 LotusScript";
BookObject.ISBN = "1884777767 ";
BookObject.Publisher = "매닝 출판물";
BookObject.RetailPrice = 43.95;
BookObject.AuthorObject = 새로운 저자();
BookObject.AuthorObject.FirstName = "토니";
BookObject.AuthorObject.LastName = "패튼";
BookObject.AuthorObject.Gender = "남성";
BookObject.AuthorObject.AddressObject = 새 주소();
BookObject.AuthorObject.AddressObject.Address1 = "1번 도로";
BookObject.AuthorObject.AddressObject.City = "어디서나";
BookObject.AuthorObject.AddressObject.State = "KY";
BookObject.AuthorObject.AddressObject.Zip = "40000";
BookObject.AuthorObject.AddressObject.Country = "미국";
ser.Serialize(writer, BookObject);
작가.닫기();
} } }
위의 코드는 세 개의 개체를 하나의 개체로 변환하여 직렬화 프로세스 중에 XML 파일을 생성합니다. 다음은 예제 프로그램에서 생성된 XML 문서입니다.
<도서 xmlns:xsd=" http://www.w3.org/2001/XMLSchema "
xmlns:xsi=" http://www.w3.org/2001/XMLSchema-instance ">
직렬화 프로세스에서는 객체 데이터의 중첩도 처리할 수 있습니다. 데이터는 인식 가능한 형식으로 변환되므로 데이터 다시 로드(역직렬화) 및 다른 시스템으로의 데이터 전송이 용이해집니다. 데이터 전송 과정에서 수신 시스템은 XML 파일의 형식을 알아야 합니다(미리 알 수 없는 경우). 따라서 XML 스키마 파일을 제공해야 합니다. .NET Framework의 XSD.exe 도구는 직렬화된 XML에 대한 스키마 파일을 생성할 수 있습니다.
다음은 VB.NET으로 작성된 예제 코드입니다:
공용 클래스 주소
공개 주소1을 문자열로
공개 주소2를 문자열로
공공 도시를 문자열로
공개 상태를 문자열로
공개 우편번호를 문자열로
공개 국가를 문자열로
수업 종료
공개 클래스 작성자
공개 이름을 문자열로
공개 중간 이름을 문자열로
문자열로 공개 성
공개 제목을 문자열로
문자열로서의 공개 성별
공개 주소객체를 주소로 사용
수업 종료
공개 수업 도서
Public Author객체를 작성자로 사용
공개 제목을 문자열로
공개 ISBN을 문자열로 사용
공공 소매 가격이 두 배로
문자열로 공개 게시자
수업 종료
System.Xml.Serialization을 가져옵니다.
수입System.IO
모듈 모듈1
서브메인()
새 책으로 희미한 BookObject
새로운 XmlSerializer(GetType(Book))로 흐리게 표시
새로운 StreamWriter("booktest.xml")로 희미한 작가
BookObject 사용
.Title = "실용적인 LotusScript"
.ISBN = "1884777767 "
.Publisher = "매닝 출판물"
.소매가격 = 43.95
.AuthorObject = 새 작성자
.AuthorObject.FirstName = "토니"
.AuthorObject.LastName = "패튼"
.AuthorObject.Gender = "남성"
.AuthorObject.AddressObject = 새 주소
.AuthorObject.AddressObject.Address1 = "1번 도로"
.AuthorObject.AddressObject.City = "어디서나"
.AuthorObject.AddressObject.State = "KY"
.AuthorObject.AddressObject.Zip = "40000"
.AuthorObject.AddressObject.Country = "미국"
끝
ser.Serialize(작가, BookObject)
작가.닫기()
서브 끝
최종 모듈
제어 출력
직렬화 프로세스는 표준 XML 파일을 생성하고 데이터 멤버는 XML 요소로 변환됩니다. 그러나 모든 데이터 멤버가 요소가 되는 것은 아닙니다. 클래스 코드에 일부 태그를 추가하여 출력 XML 파일을 제어할 수 있습니다. 이런 방식으로 데이터 멤버를 요소가 아닌 XML 특성으로 변환하거나 간단히 무시할 수 있습니다. 다음 예제는 수정된 책 클래스 VB.NET 코드입니다.
공개 수업 도서
Public Author객체를 작성자로 사용
공개 제목을 문자열로
공개 ISBN을 문자열로 사용
공공 소매 가격이 두 배로
문자열로 공개 게시자
End Class
이 코드는 XML 파일을 생성할 때 클래스 멤버 ISBN을 XML 속성으로 사용하고 RetailPrice 멤버를 무시하도록 시스템에 지시합니다. 이 변경 사항은 생성된 XML 파일에서 볼 수 있습니다:
<도서 xmlns:xsd=" http://www.w3.org/2001/XMLSchema "
xmlns:xsi=" http://www.w3.org/2001/XMLSchema-instance " ISBN="1884777767 ">
<저자객체>
<성별>남성성별>
<주소객체>
<도시>어디든지도시>
<주>KY주>
<국가>미국국가>
다음은 해당 C# 코드입니다.
public class Book {
공개 도서() { }
공개 문자열 제목;
공개 작성자 AuthorObject;
[System.Xml.Serialization.XmlAttribute()]
공개 문자열 ISBN;
[System.Xml.Serialization.XmlIgnoreAttribute()]
공개 이중 RetailPrice;
공개 문자열 게시자;
}
위에서는 두 가지 표시 기호만 간략하게 언급했습니다. 전체 마크업 표기법은 .NET 설명서를 참조하세요.
XmlSerializer 클래스의 Deserialize 메서드를 호출하면 역직렬화된 데이터를 쉽게 역직렬화할 수 있습니다. 다음 VB.NET 프로그램 조각은 위에서 언급한 XML 문서의 역직렬화를 완료합니다.
Dim BookObject As New Book
새로운 XmlSerializer(GetType(Book))로 흐리게 표시
새로운 System.IO.FileStream("booktest.xml", FileMode.Open)으로 fs를 흐리게 합니다.
희미한 판독기를 새 System.XML.XmlTextReader(fs)로 사용
BookObject = CType(ser.Deserialize(reader), Book)
이 프로그램은 나중에 사용할 수 있도록 결과 데이터를 메모리에 저장합니다. 다음은 해당 C# 코드입니다.
XmlSerializer ser = new XmlSerializer(typeof(Book));
System.IO.FileStreamfs = 새로운 System.IO.FileStream("booktest.xml",
파일모드.열기);
System.Xml.XmlTextReader reader = new System.Xml.XmlTextReader(fs);
Book BookObject = (Book)(ser.Deserialize(reader));
------------------------------------- -
저자 소개: Tony Patton은 광범위한 지식을 갖춘 전문 애플리케이션 개발자이며 Java, VB, Lotus 및 XML 인증을 받았습니다.