c# 직렬화 예제

이 예제에서는 코드 3 단계의 아래 수준 단계를 수행하려고 합니다. 마지막으로 데이터가 파일에 있는지 확인하기 위해 직렬화를 사용하여 파일에서 개체를 역직렬화합니다. c#에서 직렬화는 개체를 바이트 스트림으로 변환하여 메모리 나 데이터베이스 또는 파일에 저장하는 프로세스입니다. 직렬화의 주요 목적은 필요할 때마다 개체의 상태를 저장하여 다시 만드는 것이며 웹 또는 나머지 서비스를 사용하여 다른 응용 프로그램에 개체를 보낼 수 있습니다. 1 단계) 첫 번째 단계는 직렬화에 사용할 클래스를 추가하는 것입니다 다음 코드 예제에서는이 클래스의 인스턴스를 파일에 직렬화 할 수있는 방법을 보여줍니다. Serializable 특성을 상속할 수 없다는 점에 유의해야 합니다. MyObject에서 새 클래스를 파생하는 경우 새 클래스도 특성으로 표시되어야 하거나 직렬화할 수 없습니다. 예를 들어 아래 클래스의 인스턴스를 직렬화하려고 하면 MyStuff 형식이 직렬화 가능한 것으로 표시되지 않음을 알리는 SerializationException이 표시됩니다. 바이너리 또는 XML 직렬화를 사용할 수 있습니다.

이진 직렬화에서는 읽기 전용멤버인 모든 멤버가 직렬화되고 성능이 향상됩니다. XML 직렬화는 상호 운용성을 위해 더 읽기 쉬운 코드와 개체 공유 및 사용의 유연성을 제공합니다. c#에서는 이진 또는 XML 직렬화를 사용하여 개체를 직렬화할 수 있습니다. 이진 직렬화에서는 모든 멤버가 직렬화되고 성능이 향상되지만 XML 직렬화는 더 나은 코드 가독성과 개체 공유에 대한 더 큰 유연성을 제공합니다. 직렬화는 Tutorial 클래스의 데이터 속성을 파일에 직접 작성하는 데 사용할 수 있습니다. 역직렬화는 파일에서 데이터를 읽고 자습서 개체를 다시 생성하는 데 사용됩니다. 위에서 사용하는 BinaryFormatter는 매우 효율적이며 컴팩트바이트 스트림을 생성합니다. 이 포터로 직렬화된 모든 객체는 이것으로 직렬화될 수 있으므로 .NET Framework에서 역직렬화될 객체를 직렬화하는 데 이상적인 도구입니다. 개체가 역직렬화될 때 생성자가 호출되지 않는다는 점에 유의해야 합니다. 이 제약 조건은 성능상의 이유로 역직렬화에 배치됩니다.

그러나 이는 런타임이 개체 작성기와 맺는 일반적인 계약 중 일부를 위반하며 개발자는 개체를 serializable으로 표시할 때 의 영향을 이해해야 합니다. 사용자 지정 직렬화에서 직렬화할 개체와 작업을 수행하는 방법을 정확하게 지정할 수 있습니다. 클래스는 SerializableAttribute로 표시되어야 하며 ISerializable 인터페이스를 구현해야 합니다. 기본 직렬화를 사용하는 경우 개체의 버전 이면에 문제가 발생할 수 있습니다. 버전 전환 문제가 중요한 경우 사용자 지정 직렬화를 사용합니다. 기본 직렬화는 직렬화를 수행하는 가장 쉬운 방법이지만 프로세스에 대한 많은 제어를 제공하지는 않습니다. XML 직렬화는 개체의 공용 필드 및 속성 또는 메서드의 매개 변수 및 반환 값을 특정 XML 스키마 정의 언어(XSD) 문서를 준수하는 XML 스트림으로 직렬화합니다. XML 직렬화는 XML로 변환되는 공용 속성 및 필드가 있는 강력하게 형식이 지정된 클래스를 생성합니다. System.Xml.Serialization에는 XML을 직렬화하고 역직렬화하는 데 필요한 클래스가 포함되어 있습니다. 이 예제에서는 이진 포터터를 사용하여 직렬화를 수행합니다. 당신이해야 할 모든 스트림과 사용할 포물질의 인스턴스를 만든 다음 포터에 직렬화 메서드를 호출합니다. serialize할 스트림과 개체는 이 호출에 대한 매개 변수로 제공됩니다.

이 예제에서 명시적으로 설명되지는 않지만 클래스의 모든 멤버 변수는 serialized(개인으로 표시된 변수도 마찬가지). 이 측면에서 이진 직렬화는 공용 필드만 직렬화하는 Xml Serializer 클래스와 다릅니다.