2011-08-16 4 views
0

인터페이스를 직렬화 할 수 없다는 것을 알고 있지만이 토론에서는 인터페이스와 도메인 데이터 클래스간에 1 대 1의 매핑이 있으므로 가정합니다./주어진 인터페이스를 볼 때 도메인 클래스를 사용하도록 serializer에 지시하는 방법이 있기를 바란다.일반적인 손으로 구르는 인터페이스의 직렬화/역 직렬화 방법

나는 아주 간단한 계층 구조 개체 구조

  • 프로필
    • 요소 < 손 인터페이스 클래스의 컬렉션을 출시 < 표준 클래스가 있습니다 (하기 IProfile의) 노드
      • 요소 < 표준 클래스를
    • 연구 < 손 컬렉션 클래스 압연 : (IStudy의) 노드
      • 연구 < 표준 클래스를
원소의 컬렉션의 선언과 같은

: 다른 이유

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 클래스로 자식 클래스 만들기"...

답변

0

아직 XML 직렬화와 관련하여 많은 작업을 수행하지는 않았지만 클래스에 Serializable 특성을 추가하십시오. 속성을 적용 할 수없는 특정 사항이 있음을 유의하십시오.

참조 >> 나는 그 통해 읽은

http://msdn.microsoft.com/en-us/library/system.serializableattribute.aspx

<Serializable()> _ 
Public Class ExampleClass 

End Class 
+0

덕분에, 나는이 질문을 한 이유는 그것이 사용하여 컬렉션을 처리하는 방법 불분명 것입니다 중 <직렬화()> 또는 콜렉션이 인터페이스를 가지고있을 때 . 기본적으로 또는 비슷한 것을 듣고 싶습니다. –

관련 문제