프로그래밍백엔드 개발자 / VB.NET 개발자

VB.NET에서 객체의 직렬화 및 비직렬화는 어떤 방법으로 구현되며, 각 방법을 언제 사용해야 하며, 고려해야 할 함정은 무엇입니까?

Hintsage AI 어시스턴트로 면접 통과

답변.

VB.NET에서 객체 직렬화는 여러 방법으로 구현할 수 있습니다: 표준 .NET 직렬화기(BinaryFormatter, XmlSerializer, DataContractSerializer, JsonSerializer).

언제 사용해야 할까요:

  • BinaryFormatter — 오래되었으며 보안 문제로 인해 사용을 권장하지 않습니다.
  • XmlSerializer — 외부 프로그램과 데이터 교환 및 설정 저장에 편리합니다.
  • DataContractSerializer — 복잡한 객체의 직렬화 및 WCF와의 상호작용에 적합합니다.
  • JsonSerializer (System.Text.Json 또는 Newtonsoft.Json) — 현대 웹 API 및 언어 간 상호작용을 위해 사용됩니다.

세부 사항:

  • 공개 필드와 속성은 기본적으로 직렬화되지만 비공개 필드는 그렇지 않습니다.
  • 직렬화할 클래스는 기본 생성자를 가져야 합니다.
  • 참조 순환이 있는 객체 또는 직렬화할 수 없는 멤버가 있는 경우 직렬화 중에 예외가 발생할 수 있습니다.

XmlSerializer 예제 코드:

<Serializable()> Public Class Person Public Property Name As String Public Property Age As Integer End Class Dim p As New Person With {.Name = "Ivan", .Age = 30} Dim serializer As New Xml.Serialization.XmlSerializer(GetType(Person)) Using stream As New IO.FileStream("person.xml", IO.FileMode.Create) serializer.Serialize(stream, p) End Using

문제 있는 질문.

직렬화할 수 없는 형식을 가진 속성을 포함하는 객체를 직렬화할 수 있습니까? 무슨 일이 발생합니까?

답변: 클래스에 직렬화할 수 없는 형식의 멤버(속성/필드)가 포함되어 있는 경우 직렬화는 오류로 종료됩니다. 예를 들어, FileStream 형식의 필드를 가진 객체는 XmlSerializer를 통해 직렬화할 수 없으며, 이 유형이 직렬화를 지원하지 않기 때문에 예외가 발생합니다.

주제의 세부 사항을 모르는 실질적인 오류 사례.


이야기

비공식 생성자에 의한 직렬화 오류: 데이터 마이그레이션 중 개발자가 유일한 비공식 생성자를 가진 클래스를 직렬화하려고 했습니다. 결과적으로 직렬화가 오류로 실패하고 마이그레이션 프로세스가 중단되었습니다.


이야기

순환 참조: 프로젝트에서 XmlSerializer를 사용하여 직렬화했지만 객체 간에 순환 참조가 있었습니다. 직렬화는 StackOverflowException 및 서비스의 처리되지 않은 오류로 이어졌습니다.


이야기

우연한 데이터 손실: JsonSerializer를 통해 직렬화된 복잡한 객체의 멤버가 [JsonIgnore]로 우연히 표시되어 데이터 일부가 송신 중에 손실되었고 이후 비직렬화에서 중요한 객체 매개변수가 손실되었습니다.