3

我开发了一个使用序列化来保存对象的 Visual Basic.net 应用程序。我想在两个不同的 Visual Basic.net 应用程序中打开并保存这个对象。

做这个的最好方式是什么?我需要创建一个类库来做到这一点吗?

我可以为此提供一些帮助吗?

编辑

我希望能够在两个应用程序中打开并保存对象。

4

3 回答 3

0

您可以写入/读取 xml,然后您只需从其他应用程序检查保存它们的文件夹,以查看是否已创建或更新新文件。

序列化对象并写入xml的函数

Public Function MyObjectFileGeneration()
    Try
        Dim strPath As String = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().CodeBase)

        strPath = Replace(strPath, "file:\", "")

        Dim myObj = Form1.MyObject



        Dim objStreamWriter As New StreamWriter(strPath & "\MyFolder\MyObj.xml", False)

        Dim x As New XmlSerializer(s.GetType)
        x.Serialize(objStreamWriter, MyObj)

        objStreamWriter.Close()

        Return True

    Catch ex As Exception
        'Do something here if failure...
        Return False

    End Try
End Function

读取 xml 并反序列化为对象的函数

Public Function GetMyObjFromXMLFile() As MyObj

    'check if file exists first...

    If xmlFileExists() Then



        Dim strPath As String = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().CodeBase)



        Dim objStreamReader As New StreamReader(Replace(strPath & "\MyFolder\MyObj.xml", "file:\", ""))

        Dim MyObj As New MyObject
        Dim x As New XmlSerializer(MyObj.GetType)
        MyObj = x.Deserialize(objStreamReader)
        objStreamReader.Close()

        Return MyObj


    Else
        Return New MyObj

    End If


End Function
于 2013-04-29T09:15:04.793 回答
0

根据数据的复杂程度,您应该能够简单地用<Serializable>属性标记数据的类。然后,您可以简单地Serialize在一个应用程序中调用该方法,保存到磁盘,然后将文件读入您​​的另一个应用程序并调用Deserialize.

您将需要在两个应用程序中定义类,通过共享一个公共库最容易做到这一点。

有关基本序列化,请参阅 MDSN 示例。

于 2013-04-29T03:35:14.980 回答
0

我希望有一个简单的方法可以做到这一点,但不幸的是,我也撞到了这堵墙..

可序列化数据只能由 SAME 应用程序重新读取。(它给你一个可爱的错误信息。)我尝试使用序列化连接来简化数据包传输,但没有成功。

根据您在编程方面的能力,我对此有一个建议..

将变量序列化到内存流,然后将标头部分切出并将其推到另一个文件流中,然后当您重新加载它时,将变量保存到内存流以获取新标头,然后附加剩余数据,然后读取序列化..

还没有尝试过,但是当我回到它时,这是我的下一个方法。

我确实看到了一种 XML 方法,但建议使用压缩/加密库来保证您的数据安全.. 确实看到了一些可能做到这一点的简单方法..

抱歉,这一轮我没有代码,但是当我调查它时,我会附加这个回复..

于 2013-12-20T16:47:55.627 回答