인터페이스를 직렬화 할 수 없다는 것을 알고 있지만이 토론에서는 인터페이스와 도메인 데이터 클래스간에 1 대 1의 매핑이 있으므로 가정합니다./주어진 인터페이스를 볼 때 도메인 클래스를 사용하도록 serializer에 지시하는 방법이 있기를 바란다.일반적인 손으로 구르는 인터페이스의 직렬화/역 직렬화 방법
나는 아주 간단한 계층 구조 개체 구조
- 프로필
- 요소 < 손 인터페이스 클래스의 컬렉션을 출시 < 표준 클래스가 있습니다 (하기 IProfile의) 노드
- 요소 < 표준 클래스를
- 연구 < 손 컬렉션 클래스 압연 : (IStudy의) 노드
- 연구 < 표준 클래스를
- 요소 < 손 인터페이스 클래스의 컬렉션을 출시 < 표준 클래스가 있습니다 (하기 IProfile의) 노드
: 다른 이유
Public Class Elements
Inherits Domain.Nodes(Of Domain.IElement)
Implements Domain.IElements
Public Sub New()
MyBase.New()
End Sub
Public Sub New(ByVal pItems As IEnumerable(Of Domain.IElement))
MyBase.New(pItems)
End Sub
End Class
나는 List (Of T) 또는 keyed collection 또는 아무것도 상속하지 않는다. 노드는 손으로 롤링 된 컬렉션이지만 IEnumerable (Of T)을 구현하고있다. 노드 (Of T) 기본 클래스에서.
그래서 최소한의 고통과 노력으로 XML 직렬화/직렬화를 시도하고 있습니다. 나는 <DataContract()>
, <CollectionDataContract()>
및 <DataMember()>
을 사용하도록 안내 받았지만 다른 옵션을 고려할 의향이 있습니다.
내 역 직렬화 기능은 현재 보이는 같은 :
Private Shared Function Deserialize(ByVal pFilePath As String) As Domain.IProfile
Dim lNewItem As Domain.IProfile
Dim lProfileSerializer As New System.Xml.Serialization.XmlSerializer(GetType(Domain.Profile))
lNewItem = CType(lProfileSerializer.Deserialize(Store.OpenFile(pFilePath, IO.FileMode.Open)), Domain.Profile)
Return lNewItem
End Function
그래서 당신은 당신은 내가이 접근 권하고 싶습니다 어떻게? CollectionDataContract에 대해 말할 때 사용할 수있는 쉬운 속성이 있습니까? "Element 클래스로 자식 클래스 만들기"...
덕분에, 나는이 질문을 한 이유는 그것이 사용하여 컬렉션을 처리하는 방법 불분명 것입니다 중 <직렬화()> 또는 콜렉션이 인터페이스를 가지고있을 때. 기본적으로 또는 비슷한 것을 듣고 싶습니다. –