다음을 통해 공유


직렬화 (Visual Basic)

Serialization은 개체를 저장하거나 메모리, 데이터베이스 또는 파일로 전송하기 위해 개체를 바이트 스트림으로 변환하는 프로세스입니다. 주요 목적은 필요할 때 개체를 다시 만들 수 있도록 개체의 상태를 저장하는 것입니다. 역방향 프로세스를 역직렬화라고 합니다.

Serialization 작동 방식

이 그림에서는 serialization의 전체 프로세스를 보여 줍니다.

직렬화 그래픽

개체는 데이터뿐만 아니라 버전, 문화권 및 어셈블리 이름과 같은 개체 형식에 대한 정보를 전달하는 스트림으로 직렬화됩니다. 해당 스트림에서 데이터베이스, 파일 또는 메모리에 저장할 수 있습니다.

Serialization의 사용 용도

직렬화를 사용하면 개발자가 개체의 상태를 저장하고 필요에 따라 다시 만들어 개체와 데이터 교환의 스토리지를 제공할 수 있습니다. 개발자는 직렬화를 통해 웹 서비스를 통해 원격 애플리케이션에 개체를 보내거나, 한 도메인에서 다른 도메인으로 개체를 전달하거나, 방화벽을 통해 개체를 XML 문자열로 전달하거나, 애플리케이션 간에 보안 또는 사용자별 정보를 유지하는 등의 작업을 수행할 수 있습니다.

JSON 직렬화

네임스페이스에는 System.Text.Json JSON(JavaScript Object Notation) 직렬화 및 역직렬화에 대한 클래스가 포함되어 있습니다. JSON은 웹에서 데이터를 공유하는 데 일반적으로 사용되는 개방형 표준입니다.

JSON serialization은 개체의 공용 속성을 RFC 8259 JSON 사양을 준수하는 문자열, 바이트 배열 또는 스트림으로 직렬화합니다. 클래스 인스턴스를 직렬화하거나 역직렬화하는 방법을 JsonSerializer 제어하려면 다음 방법 중 하나 이상을 사용할 수 있습니다.

바이너리 및 XML 직렬화

네임스페이스 System.Runtime.Serialization에는 바이너리 및 XML 직렬화와 역직렬화를 위한 클래스가 포함되어 있습니다.

이진 직렬화에서는 성능이 향상되고 읽기 전용 멤버를 포함한 모든 멤버가 직렬화됩니다. XML serialization은 보다 읽기 쉬운 코드를 제공하며 상호 운용성을 위해 개체 공유 및 사용의 유연성을 높입니다.

경고

BinaryFormatter를 사용한 이진 직렬화는 위험할 수 있습니다. 자세한 내용은 BinaryFormatter 보안 가이드BinaryFormatter 마이그레이션 가이드를 참조하세요.

개체 직렬화 가능 만들기

이진 또는 XML 직렬화를 사용하여 개체를 직렬화하려면 직렬화할 개체와 직렬화된 개체를 포함할 스트림 그리고 Formatter가 필요합니다. System.Runtime.Serialization 에는 개체를 직렬화하고 역직렬화하는 데 필요한 클래스가 포함되어 있습니다.

형식에 SerializableAttribute 특성을 적용하여 이 형식의 인스턴스를 serialize할 수 있음을 나타냅니다. SerializationException serialize를 시도하는 경우 유형에 SerializableAttribute 특성이 없으면 예외가 throw됩니다.

클래스 내의 필드를 직렬화할 수 없도록 하려면 특성을 적용 NonSerializedAttribute 합니다. serialize할 수 있는 형식의 필드에 특정 환경과 관련된 포인터, 핸들 또는 기타 데이터 구조가 포함되어 있고 다른 환경에서 필드를 의미 있게 재구성할 수 없는 경우 해당 필드를 비직렬화할 수 있도록 할 수 있습니다.

직렬화된 클래스가 SerializableAttribute으로 표시된 다른 클래스의 객체에 대한 참조를 포함하고 있는 경우, 해당 객체들도 직렬화됩니다.

이진 직렬화

이진 직렬화는 이진 인코딩을 사용하여 스토리지나 소켓 기반의 네트워크 스트림과 같은 용도에 맞게 직렬화를 압축하여 생성합니다.

XML 직렬화

XML serialization은 개체의 공용 필드와 속성 또는 메서드의 매개 변수 및 반환 값을 특정 XSD(XML 스키마 정의 언어) 문서를 준수하는 XML 스트림으로 직렬화합니다. XML serialization은 공용 속성과 XML로 변환되는 필드를 사용하여 강력한 형식의 클래스를 생성합니다. System.Xml.Serialization 에는 XML을 직렬화하고 역직렬화하는 데 필요한 클래스가 포함되어 있습니다.

클래스의 인스턴스를 직렬화하거나 역직렬화하는 방식을 XmlSerializer 제어하기 위해 클래스 및 클래스 멤버에 특성을 적용할 수 있습니다.

기본 및 사용자 지정 직렬화

이진 및 XML 직렬화는 기본적인 방법과 사용자 지정 방법의 두 가지로 수행할 수 있습니다. 기본 직렬화는 .NET을 사용하여 개체를 자동으로 직렬화합니다.

기본 serialization의 유일한 요구 사항은 개체에 적용된 특성이 SerializableAttribute 있다는 것입니다. 특정 NonSerializedAttribute 필드가 직렬화되지 않도록 하는 데 사용할 수 있습니다.

기본 serialization을 사용하는 경우 개체의 버전 관리로 인해 문제가 발생할 수 있으며, 이 경우 사용자 지정 serialization이 더 좋을 수 있습니다. 기본 serialization은 serialization을 수행하는 가장 쉬운 방법이지만 프로세스에 대한 제어권을 많이 제공하지 않습니다.

사용자 지정 serialization에서 직렬화할 개체와 수행 방법을 정확하게 지정할 수 있습니다. 클래스를 표시 SerializableAttribute 하고 인터페이스를 ISerializable 구현해야 합니다. 개체를 사용자 지정 방식으로 역직렬화하려면 사용자 지정 생성자를 사용해야 합니다.

디자이너 직렬화

디자이너 직렬화는 주로 개발 도구와 관련된 개체 지속성을 포함하는 특수한 형식의 직렬화입니다. 디자이너 직렬화는 나중에 개체 그래프를 복구하는 데 사용할 수 있는 소스 파일로 개체 그래프를 변환하는 과정입니다. 소스 파일에는 코드, 태그 또는 SQL 테이블 정보가 포함될 수 있습니다.

관련 문서

방법: XML 파일에서 개체 데이터 읽기(Visual Basic)
클래스를 사용하여 이전에 XML 파일에 기록된 개체 데이터를 읽는 방법을 보여 줍니다 XmlSerializer .

방법: XML 파일에 개체 데이터 쓰기(Visual Basic)
클래스를 사용하여 XmlSerializer 클래스를 통해 객체를 XML 파일에 쓰는 방법을 보여줍니다.