【问题标题】:Serialization between two applications两个应用程序之间的序列化
【发布时间】:2025-12-03 20:55:01
【问题描述】:

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

最好的方法是什么?我需要创建一个类库来执行此操作吗?

我可以帮忙吗?

编辑

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

【问题讨论】:

    标签: vb.net visual-studio-2012 serialization class-library


    【解决方案1】:

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

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

    请参阅basic serialization 的 MDSN 示例。

    【讨论】:

    • 尝试在第二个应用程序中打开序列化对象时,出现以下错误:无法找到程序集 'TestSerializationSaveOpenObjectProject2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'。跨度>
    【解决方案2】:

    您可以写入/读取 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
    

    【讨论】:

      【解决方案3】:

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

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

      根据你的编程水平,我对这个有一个推荐..

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

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

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

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

      【讨论】: