2016-04-23 14 views
0

Windows 10ユニバーサルアプリケーション。 VBクラスのシリアライズ原因エラー

ファイルに保存してファイルから読み込みたいクラスがあります。保存はできますが、読み込もうとするとエラーが表示されます。 =エラー

メッセージが並んで1位249は、要素「http://schemas.datacontract.org/2004/07/KoW_Universal_v2:MagicItem」「http://schemas.microsoft.com/2003/10/Serialization/Arrays:ArrayOfKeyValueOfstringMagicItemyoeMIiQz」データコントラクトのデータが含まれています。デシリアライザは、この契約にマップされているタイプについての知識がありません。 「ArrayOfKeyValueOfstringMagicItemyoeMIiQz」に対応する型を既知の型のリストに追加します。たとえば、KnownTypeAttribute属性を使用するか、DataContractSerializerに渡される既知の型のリストに追加します。それを修正 ソース= System.Private.DataContractSerialization

Imports System.Runtime.Serialization 
Imports Windows.Storage 

Public Class MagicItem 
    Property MagicItemName As String 
    Property MagicItemCost As Integer 
    Property MagicItemDescripyion As String 
    Property LimitToHero As Boolean 
    Property LimitToSpecialRule As String 'key to the special rule 

End Class 



Public Class clsMagicItems 
    Private MagicItems As New Dictionary(Of String, MagicItem) 

Async Sub SaveMagicItems() 
    ' StorageFile File = Await openPicker.PickSingleFileAsync(); 
    Dim myfile As StorageFile 
    myfile = Await ApplicationData.Current.LocalFolder.CreateFileAsync("MagicItems.dat", CreationCollisionOption.ReplaceExisting) 

    Dim KnownTypeList As New List(Of Type) 
    KnownTypeList.Add(GetType(clsMagicItems)) 
    KnownTypeList.Add(GetType(MagicItem)) 

    Dim r As Streams.IRandomAccessStream 
    r = Await myfile.OpenAsync(FileAccessMode.ReadWrite) 
    Using outStream As Streams.IOutputStream = r.GetOutputStreamAt(0) 
     Dim serializer As New DataContractSerializer(GetType(clsMagicItems), KnownTypeList) 
     serializer.WriteObject(outStream.AsStreamForWrite(), MagicItems) 
     Await outStream.FlushAsync() 
     outStream.Dispose() 
     r.Dispose() 
    End Using 
End Sub 
Async Sub LoadMagicItems() 
    Try 
     Dim myfile As Stream 

     Dim KnownTypeList As New List(Of Type) 
     KnownTypeList.Add(GetType(clsMagicItems)) 
     KnownTypeList.Add(GetType(MagicItem)) 

     Dim serializer As New DataContractSerializer(GetType(clsMagicItems), KnownTypeList) 
     myfile = Await ApplicationData.Current.LocalFolder.OpenStreamForReadAsync("MagicItems.dat") 
     'LINE BELOW RAISE ERROR 
     MagicItems = serializer.ReadObject(myfile) 
    Catch 
     'failed to load the file 
    End Try 
End Sub 
End Class 

答えて

0

、次のコード

KnownTypeList.Add(GetType(Dictionary(Of String, MagicItem))) 
... 
Dim serializer As New DataContractSerializer(GetType(Dictionary(Of String, MagicItem)), KnownTypeList) 
を持っている必要があります
関連する問題