私はあなたがインターフェイスをシリアライズできないことを知っていますが、ここではインターフェイスとドメインデータクラスの間に1対1のマッピングがありますので、 /与えられたインタフェースを見るときにシリアライザにドメインクラスの使用を伝える方法があることを望んでいる。ジェネリックハンドを集めたシリアル化/デシリアライズする方法
私はかなり単純な階層のオブジェクト構造
- プロフィール
- 要素<手は、インタフェースクラスのコレクションロール<標準クラスがあります(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)やキー付きコレクションなどを継承しているわけではありませんが、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」として子クラスを作成するのに使用できる簡単な属性はありますか?
おかげで、私は質問をされた理由は、いずれかを使用してコレクションを処理する方法は不明だったということですかコレクションがインターフェイスを保持している場合、基本的に –