明飞的技术园地

笨鸟先飞
  博客园  :: 新随笔  :: 联系 :: 管理

序列化实战-基本序列化(vb.net描述)

Posted on 2006-09-18 16:04  明飞  阅读(2919)  评论(0)    收藏  举报
首先建立一个MyObject类,代码如下:
1
2<Serializable()>Public Class MyObject
3    Public n1 As Integer = 0
4    Public n2 As Integer = 0
5    Public str As String = Nothing
6End Class

7
注意如果是c#则在类前添加[Serializable]代码如下:
1[Serializable]
2public class MyObject {
3  public int n1 = 0;
4  public int n2 = 0;
5  public String str = null;
6}

7

但后就是调用存储和读取的代码:
  1Imports System.Runtime.Serialization
  2Imports System.Data
  3Imports System.Diagnostics
  4Imports System.Runtime.Serialization.Formatters.Binary
  5Imports System.IO
  6
  7
  8Public Class mainForm
  9    Inherits System.Windows.Forms.Form
 10
 11Windows 窗体设计器生成的代码
165
166    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
167
168    End Sub

169
170    Private Sub txtWrite_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtWrite.Click
171
172        Dim obj As New MyObject
173
174        If IsNumeric(Me.txtN1.Text.Trim()) Then
175            obj.n1 = CType(Me.txtN1.Text.Trim, System.Int32)
176        Else
177            obj.n1 = 0
178        End If
179        If IsNumeric(Me.txtN2.Text.Trim()) Then
180            obj.n2 = CType(Me.txtN2.Text.Trim, System.Int32)
181        Else
182            obj.n2 = 0
183        End If
184
185        obj.str = Me.txtStr.Text.Trim
186        Dim oFormatter As IFormatter = New BinaryFormatter
187        Dim oStream As Stream = New FileStream("mingfei.dat", FileMode.Create, FileAccess.Write, FileShare.None)
188        oFormatter.Serialize(oStream, obj)
189        oStream.Close()
190        MessageBox.Show("序列化存储完成!")
191
192    End Sub

193
194    Private Sub txtRead_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtRead.Click
195        Dim oFormatter As IFormatter = New BinaryFormatter
196        Dim oStream As Stream = New FileStream("mingfei.dat", FileMode.Open, FileAccess.Read, FileShare.Read)
197        Dim obs As New MyObject
198        obs = CType(oFormatter.Deserialize(oStream), MyObject)
199        oStream.Close()
200        Me.lblN1.Text = obs.n1.ToString()
201        Me.lblN2.Text = obs.n2.ToString
202        Me.lblStr.Text = obs.str
203        MessageBox.Show("序列化读取完成!")
204    End Sub

205End Class

206

最后的界面如下