2012-02-03 3 views
3

내 자신의 객체에 [serializable] 메타 태그를 추가하여 직렬화 할 수 있습니다. 이제 직렬화가 필요한 타사 라이브러리를 사용합니다. 코드를 검사했는데 문제가되지 않아야합니다. 타사 코드를 변경하지 않고이 문제를 해결할 수있는 방법이 있습니까?C# : 타사 객체를 직렬화 가능하게 만들기

+1

하위 클래스가 아니어도 두 개의 동기화 된 앱 도메인간에 데이터를 전달할 때 적합합니다. – vulkanino

+0

이것은 어떤 serializer ('BinaryFormatter'입니까?) 및 b : 형식이 무엇인지에 따라 많이 달라집니다. 개인적으로는 별도의 데이터 모델을 사용합니다. –

답변

6

내 조언은 다음과 같습니다. 데이터이 아닌 구현을 직렬화하십시오. 제 3 자 객체가 존재한다는 사실은 데이터와 관련이 없습니다. 이것이 구현 세부 사항입니다. 마찬가지로, 항상 동일한 조언을 제공합니다. 이 복잡 해지면 우선 데이터을 나타내는 별도의 DTO 모델을 도입하여 구현 상태를 따로 분리하고 현재 상태를 DTO. 따라서 저장소에 영향을주지 않고 구현 변경 사항을 처리 할 수 ​​있으며 그렇지 않은 경우 직렬화 할 수없는 객체를 직렬화 할 수 있습니다.

예를 들어 protobuf-net을 사용하면 런타임에 모든 유형의 순차 나열 정보를 제공 할 수 있고 b : 까다로울 때 자동으로 사용할 "대리자"를 제공하지만 DTO 모델은 더 간단하고 유지하기 쉽습니다.

[Serializable]의 사용은 BinaryFormatter을 제안합니다. 제 생각에 은 거의 없습니다BinaryFormatter은 구현 세부 정보를 사용하므로 어떤 유형의 저장소에도 적합합니다.

+0

내가 직렬화해야하는 객체는 이미 DTO 객체의 일부이며 제공되는 webcomponents (mvc 컨트롤 툴킷에서 제공)에서 사용됩니다. 그러므로 직렬화 할 수 있어야합니다. – Patrick

+0

@Patrick DTO에서 직렬화 할 수없는 것이 있다면 DTO가 아닙니다 –

+0

것은 mvc controlstoolkit이 트래커 객체에 그리드의 변경 사항을 추적하도록 제공한다는 것입니다. 예를 들어 다음은 List >>이됩니다. 툴킷의 소스를 다운로드하고 직접 직렬화를 추가했습니다. 또한 관리자에게 툴킷에 추가하라는 요청을했고 그는 그렇게 할 것입니다. – Patrick

0

유형이 공개 된 경우 XmlSerializer을 사용하여 원하는 것을 수행 할 수 있어야합니다.

more information on this here

직렬화를 그리고로 XML 문서에서 개체를 직렬화 복원합니다. XmlSerializer를 사용하면 개체를 XML로 인코딩하는 방법을 제어 할 수 있습니다.

+0

실제로 많은 유연성을 제공하지는 않습니다 ... –

0

정확하게 하위 클래스를 가져와 직렬화 할 수있게 만드십시오.

+0

XmlSerializer를 사용하는 경우 생성자를 잊지 마십시오. – Candide

+0

@Ingenu, 생성자에 대한 특별한 점은 무엇입니까? –

+2

@BuhBuh'XmlSerializer'에서 사용할 매개 변수없는 public 생성자가 필요합니다. 그러나'[Serializable]'은'XmlSerializer'가 아니라'BinaryFormatter'와 관련이 있습니다. –

0

어셈블리를 분해하거나 직렬화 가능 속성을 주입 한 다음 다시 어셈블하는 것과 같이 좀 더 극단적 인 작업을 할 수 있도록 어댑터를 작성하거나 준비하십시오.

+0

O_o. 그것은 매우 극단적 인 경우입니다. 대상 클래스가 봉인 된 경우 복제 dto를 만들 수있는 권한이 없으며 이진, XML, JSON 또는 CSV로 serialize 할 수 없으며 일부 다른 깨지지 않는 힘이 코드에서 직렬화를 수행하는 데 어려움을 겪고 있습니다. IL에서 수정을해야합니다. – Oybek

관련 문제