| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4556 人关注过本帖
标题:VB.net序列化问题
只看楼主 加入收藏
xiangyue0510
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:86
帖 子:938
专家分:5244
注 册:2015-8-10
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:3 
VB.net序列化问题
这个是我在对TV3D模型进行序列化时发生的错误。哪位大牛遇到过,请帮助解决一下。
程序集“mscorlib,Version=4.0.0.0,Culture=neutral, PublicKeyToken=b77a5c561934e089”中的类型System._ComObject未标记为可序列化

模型结构声明
程序代码:
Module ModuleTV3DModel
    <Serializable()> Public Structure TV3D_Model 
        Public ModelName As String

        'TV3D构件对象(数组)
        Public MB_L() As Member_L
        Public MB_C() As Member_C
        Public MB_H() As Member_H
        Public MB_T() As Member_T
        Public MB_Tube() As Member_Tube

        Public MB_Shell() As ShellMember 'TV3D板壳对象(数组)
        Public MB_Joints() As Member_Joint  'TV3D节点对象(数组)
    End Structure
End Module


子结构声明,都类似所以就给了一个
程序代码:
Module ModuleTube
    <Serializable()> Public Structure Member_Tube
        Dim M_Name As String   '构件名称
        Dim SectName As String      '构件截面名称
……
        '下面还有这个结构的一些函数



主窗口代码,打开模型按钮还做(目前是从数据库打开,没有序列化),保存按钮出问题
程序代码:
    Shared myModel(0) As TV3D_Model
     ……

    Private Sub ToolStripButtonSaveModel_Click(sender As Object, e As EventArgs) Handles ToolStripButtonSaveModel.Click
        Dim fStream As New FileStream(Application.StartupPath & "\1.smd", FileMode.Create)
        Dim bf As New BinaryFormatter
        bf.Serialize(fStream, myModel)
        fStream.Close()
    End Sub


搜索更多相关主题的帖子: 模型 
2016-05-24 09:52
不说也罢
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:39
帖 子:1481
专家分:4989
注 册:2007-10-7
收藏
得分:20 
对象的序列化的实现,首先要保证该对象可以序列化。而且,序列化只是将对象的属性进行有效的保存,对于对象的一些方法则无法实现序列化的。
对TV3D模型不是太了解,帮你顶下。
        Dim TestModel As New TV3D_Model
        Dim fStream As New FileStream(Application.StartupPath & "\1.smd", FileMode.Create,FileAccess.Write, FileShare.None)
        Dim bf As New BinaryFormatter
        bf.Serialize(fStream, TestModel)
        fStream.Close()

===================================================
讨厌C#的行尾的小尾巴;和一对大括号{ }
===================================================
2016-05-24 11:07
xiangyue0510
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:86
帖 子:938
专家分:5244
注 册:2015-8-10
收藏
得分:0 
谢谢,版主。
这个TV3D应该是可以序列化的,官方是有例子的。http://wiki. 最下面就是VB的Code,但是太简单了。
现在就是搞不清楚是什么原因造成报错。
希望有高手弄过,给指点一下。
不行只能先回到最简单的例子,我现在的程序已经成型,再来改确实可能出现问题。
2016-05-24 12:52
xiangyue0510
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:86
帖 子:938
专家分:5244
注 册:2015-8-10
收藏
得分:0 
回复 2楼 不说也罢
你说的很对,我研究了官方的例子,它序列化的也是基本的数据类型。
所以我做了一个很简单的例子测试
下面的代码是可以执行的,但是如果把Mesh放在Ball的结构中就会出现1楼这样的问题
程序代码:
Option Explicit On
Imports TV3D65
Imports Imports System.Data
Imports System.Runtime.Serialization
Imports System.Runtime.Serialization.Formatters.Binary

Public Class Form1
    <Serializable()> Public Structure Ball   '这句前的 <Serializable()>必须用,否则会标记为“未标记为可序列化”
        Public X, Y, Z As Single
        Public R As Single
    End Structure

    Dim Tv As New TVEngine '调用tv3d所必需的
    Dim Scene As New TVScene '调用tv3d所必需的
    Dim myball As Ball
    Dim Mesh As TVMesh

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Me.Show() '显示当前窗口,每次都加上错不了
        myball.X = 0
        myball.Y = 0
        myball.Z = 10
        myball.R = 2

    End Sub

    Private Sub ButtonSave_Click(sender As Object, e As EventArgs) Handles ButtonSave.Click
        myball.X = CSng(TextBoxX.Text)
        myball.Y = CSng(TextBoxY.Text)
        myball.Z = CSng(TextBoxZ.Text)
        myball.R = CSng(TextBoxR.Text)

        Dim fStream As New FileStream(Application.StartupPath & "\1.smd", FileMode.Create)
        Dim bf As New BinaryFormatter
        bf.Serialize(fStream, myball)
        fStream.Close()
        MsgBox("Done!"End Sub

    Private Sub ButtonLoad_Click(sender As Object, e As EventArgs) Handles ButtonSave.Click
        Tv.Init3DWindowed(PictureBox1.Handle, True'将当前窗口的句柄传递给TV3D,用窗口模式启动tv3d
        Tv.SetVSync(True)
        Tv.DisplayFPS(FalseDim fStream As New FileStream(Application.StartupPath & "\1.smd", FileMode.Open)
        Dim sfFormatter As New BinaryFormatter
        'Erase myball  '将当前的数组清空, 
        '如用新的数组,如 Dim num1() as StockPara  则需要明确定义类型否则报错“无法将类型*** 转换为类型***”
        'MsgBox(IsNothing(PP))   '检查数组是否清空,调试时使用
        myball = sfFormatter.Deserialize(fStream)
        fStream.Close()


        Mesh = Scene.CreateMeshBuilder
        Mesh.SetPosition(myball.X, myball.Y, myball.Z)
        '************************  创建型钢的代码,需要修改 **************************
        Mesh.CreateSphere(myball.R, 12, 12)
        Do '主循环  
            Tv.Clear() '清屏
            Mesh.Render() '渲染茶壶   
            Tv.RenderToScreen() '把所得最终结果渲染到屏幕  
            Application.DoEvents() '这句是把线程空出来,使其他的的程序能运行,必加
        Loop
    End Sub
End Class
2016-05-24 14:40
快速回复:VB.net序列化问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018391 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved