2011-08-16 6 views
0

私はあなたがインターフェイスをシリアライズできないことを知っていますが、ここではインターフェイスとドメインデータクラスの間に1対1のマッピングがありますので、 /与えられたインタフェースを見るときにシリアライザにドメインクラスの使用を伝える方法があることを望んでいる。ジェネリックハンドを集めたシリアル化/デシリアライズする方法

私はかなり単純な階層のオブジェクト構造

  • プロフィール
    • 要素<手は、インタフェースクラスのコレクションロール<標準クラスがあります(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)やキー付きコレクションなどを継承しているわけではありませんが、Nodeはハンドロールコレクションですが、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 

SOあなたは、私がこれにアプローチをお勧めだろうか? CollectionDataContractに「Element」として子クラスを作成するのに使用できる簡単な属性はありますか?

答えて

0

まだXMLシリアル化に関して多くのことを行っていませんが、クラスにSerializable属性を追加してください。ただし、属性を適用することはできません。

参照:>>私はそれを読んでいた

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

<Serializable()> _ 
Public Class ExampleClass 

End Class 
+0

おかげで、私は質問をされた理由は、いずれかを使用してコレクションを処理する方法は不明だったということですかコレクションがインターフェイスを保持している場合、基本的に

関連する問題