Moinsen zusammen,
ich habe früher - als ich noch richtig fett in der Materie war - Immer den BinaryFormatter benutzt, um meine Objekte zu sichern. Das scheint jetzt nicht mehr zu gehen (BinaryFormatter ist veraltet).
Gut, speichern wir das ganze als XML ab. Steht auch in der MSDN: als Ersatz für den BinaryFormatter soll der XmlSerializer verwendet werden. Gelesen, getan, und dann kommt der Berg.
Ich bekomme die Meldung: "InvalidOperationException: System.RuntimeType is inaccessible due to its protection level. Only public types can be processed." Seltsam, wenn doch wirklich alles als Public deklariert ist.
Der Code Speichern:
Die Klasse die gespeichert werden soll
Wo liegt mein Denkfehler? Oder habe ich das Prinzip nicht verstanden?
Danke vorab,
Jens
ich habe früher - als ich noch richtig fett in der Materie war - Immer den BinaryFormatter benutzt, um meine Objekte zu sichern. Das scheint jetzt nicht mehr zu gehen (BinaryFormatter ist veraltet).
Gut, speichern wir das ganze als XML ab. Steht auch in der MSDN: als Ersatz für den BinaryFormatter soll der XmlSerializer verwendet werden. Gelesen, getan, und dann kommt der Berg.
Ich bekomme die Meldung: "InvalidOperationException: System.RuntimeType is inaccessible due to its protection level. Only public types can be processed." Seltsam, wenn doch wirklich alles als Public deklariert ist.
Der Code Speichern:
VB.NET-Quellcode
- Public Function Save(Optional ByVal Overwrite As Boolean = False) As Boolean
- Dim Result As Boolean = False
- Dim Serializer As Xml.Serialization.XmlSerializer = Nothing
- If IO.File.Exists(_Path) Then
- If Overwrite Then IO.File.Delete(_Path)
- Using Stream = New IO.FileStream(_Path, IO.FileMode.CreateNew)
- Serializer = New Xml.Serialization.XmlSerializer(_List.GetType)
- Serializer.Serialize(Stream, _List) ' <-- hier knallt's
- Stream.Close()
- End Using
- Result = True
- End If
- Return Result
- End Function
Die Klasse die gespeichert werden soll
VB.NET-Quellcode
- <Serializable> Public Class Field
- Public ReadOnly Property ID As Integer
- Public Property Name As String
- Public Property Type As System.Type
- Public Property Ignore As Boolean
- Public Sub New()
- _ID = -1
- End Sub
- Public Sub New(ByVal ID As Integer)
- _ID = ID
- _Name = ""
- _Type = Nothing
- _Ignore = False
- End Sub
- Public Sub New(ByVal ID As Integer, ByVal Name As String, ByVal Type As System.Type, ByVal Ignore As Boolean)
- _ID = ID
- _Name = Name
- _Type = Type
- _Ignore = Ignore
- End Sub
- End Class
Wo liegt mein Denkfehler? Oder habe ich das Prinzip nicht verstanden?
Danke vorab,
Jens