Я начал программировать в компании, где программа была написана в VB. Я преобразовал его в C#, потому что это гораздо более чистый код.VB Сериализация на C# Сериализация
В VB они сделали что-то вроде этого:
Class Program
Friend Shared Sub Main(args As String())
Dim obj As New Class1()
Dim fs As New System.IO.FileStream("test.txt", System.IO.FileMode.OpenOrCreate)
Dim bf As New System.Runtime.Serialization.Formatters.Binary.BinaryFormatter()
bf.Serialize(fs, obj)
fs.Close()
fs = New System.IO.FileStream("test.txt", System.IO.FileMode.OpenOrCreate)
bf = New System.Runtime.Serialization.Formatters.Binary.BinaryFormatter()
obj = bf.Deserialize(fs)
For Each item As String In obj.myList
Console.WriteLine(item)
Next
Console.Read()
End Sub
End Class
<Serializable> _
Class Class1
Public myList As List(Of String)
Public Sub New()
myList = New List(Of String)()
myList.Add(True)
myList.Add(False)
myList.Add(True)
myList.Add(False)
myList.Add(True)
myList.Add(False)
myList.Add(True)
End Sub
End Class
Но в C# уступка BOOL в строку-Вар, конечно, запрещено. Я написал класс в C#, который называется Class1Old, который включает в себя все члены, объявленные в VB, , но когда я десериализую C#, я поймаю исключение «String не может быть преобразован в Boolean».
Я наблюдал в письменном * .txt файл и результат был очень запутанным:
ÿÿÿÿ JConsoleApplication1, Version=1.0.0.0, Culture=neutral,
PublicKeyToken=null
ConsoleApplication1.Class1
myListSystem.Collections.Generic.List`1[[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]
System.Collections.Generic.List`1[[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]
_items_size_version True False
Я не могу себе представить, как theese 7 значения преобразуются и переделаны.
Как я могу десериализовать файл на C#, который был написан с VB?
надежда кто-то может мне помочь ...
EDIT:
Теперь я включаю VB DLL-проект в моей ptoject включая "старый" код. мой C# -код вызывает метод в VB-коде, который начинает десериализацию. Но я по-прежнему получаю ArgumentException:
The object of type "System.Collections.Generic.List`1[System.String]" can not be converted to type "System.Collections.Generic.List`1[System.Boolean]".
Но все аргументы в сериализованном классе имеют одинаковый тип в моем реальном проекте, как и в моем чистом VB проекта.
Так что же причиной этого исключения?
приветствует Хенрик