我开始在一家公司编程,那里的程序是用 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 分配给 String-Var。我在 C# 中编写了一个名为 Class1Old 的类,其中包括在 VB 中声明的所有成员,但是当我在 C# 中反序列化时,我捕获了异常“字符串无法在布尔值中转换”。
我看了写的 *.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
我无法想象这 7 个值是如何转换和重新转换的。
如何反序列化从 VB 编写的 C# 文件?
希望有人可以帮助我...
编辑:
现在我在我的 ptoject 中包含一个 VB dll 项目,包括“旧”代码。我的 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 项目中的类型相同。
那么导致该异常的原因是什么?
问候亨利克