Hallo NG
Ich nutze VB.NET 2005.
Seit einiger Zeit experimentiere ich mit Serialiserung von Daten. - Inzwischen dachte ich, dass ich das Thema im Griff habe. - Leider nicht...
Ich nutze folgende Klasse:
<Serializable()> Public Class clsLagerzugang
Implements Runtime.Serialization.ISerializable, _
Runtime.Serialization.IDeserializationCallback
Public InvNr As String: Public Lieferant As Integer
Public Artikelnummer As String : Public Grösse As String
Public Farbe As String : Public ICode As Long
Public Artikelbezeichnung As String : Public Menge As Integer
Public EPreis As Decimal : Public VPreis As Decimal
Public Datum As Date
Public Sub GetObjectData(ByVal info As _
System.Runtime.Serialization.SerializationInfo, ByVal context As _
System.Runtime.Serialization.StreamingContext) Implements _
System.Runtime.Serialization.ISerializable.GetObjectData
info.AddValue("InvNr", InvNr)
' (Wegen Länge der Nachricht auf nur einen Eintrag gekürzt)
End Sub
Public Sub New( _
ByVal info As Runtime.Serialization.SerializationInfo, _
ByVal context As Runtime.Serialization.StreamingContext)
' Hier kommt der Fehler
InvNr = info.GetValue(InvNr, GetType(String))
' (Wegen Länger der Nachricht auf nur einen Eintrag gekürzt)
End Sub
End ClassDas Serialisieren in eine mySQL Datenbank funktioniert wunderbar. - Folgenden Code benutze ich beim deserialisieren:
mySQLConnection.Open()
mySQLCommand.Connection = mySQLConnection
mySQLCommand.CommandText = "Select Artikel, Gebucht, Übertragen from " _
& _
"LagZugang where Art=03 and FilialCode='" & FilialCode & "'"
Dim dAdapter As New CoreLab.MySql.MySqlDataAdapter(mySQLCommand)
Dim dTable As New System.Data.DataTable
dAdapter.Fill(dTable)
prgBar.Maximum = dTable.Rows.Count : prgBar.Value = 0
For Each dRow As System.Data.DataRow In dTable.Rows
Dim b As Byte() = CType(dRow("Artikel"), Byte())
Dim Stream As New System.IO.MemoryStream(b)
Dim usr As New clsLagerzugang
Dim form As New _
Runtime.Serialization.Formatters.Binary.BinaryFormatter()
usr = form.Deserialize(Stream)Das Problem liegt jetzt bei folgender Code Sequenz: - usr = form.Deserialize(Stream) - Danach hüpft das Programm (so wie es sollte) in die Klasse zum SubNew mit Serialisierung. - Dort kann ich im DebugModus alle Variablen auslesen. - Also d.h. die deserialisierung funktioniert. - Aber sobald das Programm auf eine CodeZeile innerhalb von Sub New kommt, bekomme ich folgende Fehlermeldung:
System.Reflection.TargetInvocationException was caught
Message="Ein Aufrufziel hat einen Ausnahmefehler verursacht."
Source="mscorlib"
StackTrace:
bei System.RuntimeMethodHandle._SerializationInvoke(Object target, SignatureStruct& declaringTypeSig, SerializationInfo info, StreamingContext context)
bei System.RuntimeMethodHandle.SerializationInvoke(Object target, SignatureStruct declaringTypeSig, SerializationInfo info, StreamingContext context)
bei System.Reflection.RuntimeConstructorInfo.SerializationInvoke(Object target, SerializationInfo info, StreamingContext context)
bei System.Runtime.Serialization.ObjectManager.CompleteISerializableObject(Object obj, SerializationInfo info, StreamingContext context)
bei System.Runtime.Serialization.ObjectManager.FixupSpecialObject(ObjectHolder holder)
bei System.Runtime.Serialization.ObjectManager.DoFixups()
bei System.Runtime.Serialization.Formatters.Binary.ObjectReader.Deserialize(HeaderHandler handler, __BinaryParser serParser, Boolean fCheck, Boolean isCrossAppDomain, IMethodCallMessage methodCallMessage)
bei System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize(Stream serializationStream, HeaderHandler handler, Boolean fCheck, Boolean isCrossAppDomain, IMethodCallMessage methodCallMessage)
bei System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize(Stream serializationStream)
bei Optik.frmLagerZugang.FillData(String FilialCode)
Woran kann das liegen? |