gentellu 发表于 2008-9-3 23:14:00

对象反系列化问题

<p>将一对象系列化后存储在一文件中,在应用程序类型为Windows程序的情况下,读文件将该对象反系列化可以成功。但在应用程序类型为类库的情况下,通过AUTOCAD调用对象反系列化进行反系列化时提示如下错误:</p><p>System.Runtime.Serialization.SerializationException: 无法找到程序集
                <br/>HSCad_Beam, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null</p><p>其实HSCad_Beam.dll已经加载了。</p><p>请高手赐教!谢谢!</p>

sailorcwx 发表于 2008-9-4 11:34:00

<p>不要用filestream,序列化用streamwriter,反序列化用streamreader</p>

gentellu 发表于 2008-9-4 22:16:00

<p>序列化时通过BinaryFormatter调用Public Sub Serialize(ByVal serializationStream As System.IO.Stream, ByVal graph As Object)<br/>&nbsp;&nbsp;&nbsp;&nbsp; 成员属于: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter<br/>摘要:<br/>将对象或具有指定顶级(根)的对象图形序列化为给定流。</p><p>参数:<br/><strong><em><u>serializationStream: 图形要序列化为的流。</u></em></strong> -----不是streamwriter<br/>graph: 位于要序列化图形的根位置的对象。</p><p>反序列化时通过BinaryFormatter调用Public Function Deserialize(ByVal serializationStream As System.IO.Stream) As Object<br/>&nbsp;&nbsp;&nbsp;&nbsp; 成员属于: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter<br/>摘要:<br/>将指定的流反序列化为对象图形。</p><p>参数:<br/><strong><em><u>serializationStream: 要从其中反序列化对象图形的流。</u></em></strong> ----不是streamreader</p>

sailorcwx 发表于 2008-9-5 02:21:00

你不要给我抄一堆东西,那些东西我也有!~~~~~~
我不知道你要序列化什么,反正我自己的测试中就是使用filestream出错,后来改成streamwriter和streamreader成功
下面是我的程序的一部分,是把我自定义的类实例序列化保存到文件中去的

'读取配置
      '类库路径
      Dim Path As String = GetDirectoryName(Reflection.Assembly.GetExecutingAssembly.Location)
      '打开配置文件流
      Dim fsOptionFile As New StreamReader(Path & "\YH_Option.dat")
      '建立序列化对象
      Dim xsOption As New XmlSerializer(GetType(YH_Options))
      '将配置序列化并保存到配置文件中
      Options = CType(xsOption.Deserialize(fsOptionFile), YH_Options)
      '关闭配置文件流
      fsOptionFile.Close()

'类库路径
            Dim Path As String = GetDirectoryName(Reflection.Assembly.GetExecutingAssembly.Location)
            '打开配置文件流
            Dim fsOptionFile As New StreamWriter(Path & "\YH_Option.dat")
            '建立序列化对象
            Dim xsOption As New XmlSerializer(GetType(YH_Options))
            '将配置序列化并保存到配置文件中
            xsOption.Serialize(fsOptionFile, Options)
            '关闭配置文件流
            fsOptionFile.Close()


sailorcwx 发表于 2008-9-5 02:22:00

<p>序列化的方式有三种,我选的是xml命名空间的</p><p>如果你不愿意把你的代码贴出来,那没办法~~~~~~~~~~</p>

gentellu 发表于 2008-9-5 12:20:00

<p>哈哈,得罪得罪!</p><p>我用的是BinaryFormatter,现在把源文件传上,你帮忙看下。谢谢!</p><p>主要问题如下:</p><p>直接用Form1启动程序时系列化及反系列化都正常,利用CAD来启动Form1进行反系列化时出现异常:</p><p>System.Runtime.Serialization.SerializationException: 无法找到程序集<br/>&nbsp;&nbsp;<br/>UserNameInfo, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null</p>

gentellu 发表于 2008-9-5 12:30:00

sailorcwx 发表于 2008-9-5 17:38:00

<p>还是2楼那句话,把</p><p>Dim stream As FileStream = New FileStream("C:\Documents and Settings\All Users\桌面\Jm.Dat", FileMode.Create, FileAccess.Write, FileShare.None)</p><p>中的filestream换掉</p><p>还有一个文件不能存多个序列化对象的,如果要序列化多个对象,应该把他们组合成数组,然后序列化数组</p>

gentellu 发表于 2008-9-9 10:26:00

但直接用Form1启动程序时系列化及反系列化都正常,只是利用CAD来启动Form1进行反系列化时出现异常,我就是不太明白这方面的原因。

sailorcwx 发表于 2008-9-9 18:43:00

<p>这是FileStream的bug</p>
页: [1] 2
查看完整版本: 对象反系列化问题