Imports System.Xml Imports System.IO Imports System.Collections Imports System.Runtime.Serialization Imports System.Runtime.Serialization.Formatters.Binary <Serializable()> Public Class CEmpData Implements ICloneable, ISerializable Private ArrEmp As ArrayList Public Sub New() Dim xmldoc As New XmlDocument Dim node As XmlNode Dim objEmp As CEmp ArrEmp = New ArrayList xmldoc.Load("empdata.xml") For Each node In xmldoc.DocumentElement.ChildNodes objEmp = New CEmp objEmp.FName = node.SelectSingleNode("firstname").InnerText objEmp.LName = node.SelectSingleNode("lastname").InnerText ArrEmp.Add(objEmp) Next End Sub Public Sub New(ByVal info As SerializationInfo, ByVal context As StreamingContext) Dim intIndex As Integer Dim intCount As Integer Dim objEmp As CEmp ArrEmp = New ArrayList intCount = CInt(info.GetValue("emp_count", GetType(String))) For intIndex = 0 To intCount - 1 objEmp = New CEmp(info, context, intIndex) ArrEmp.Add(objEmp) Next End Sub Public Function Clone() As Object Implements ICloneable.Clone Try Return Me Catch ex As Exception MsgBox(ex.ToString) End Try End Function Public Function Clone(ByVal Deep As Boolean) As Object Try If Deep Then Return CreateDeepCopy() Else Return Clone() End If Catch ex As Exception MsgBox(ex.ToString) End Try End Function Private Function CreateDeepCopy() As CEmpData Dim objEmpCopy As CEmpData Dim objStream As Stream Dim objBinFormatter As New BinaryFormatter Try objStream = File.Open("Empdata.bin", FileMode.Create) objBinFormatter.Serialize(objStream, Me) objStream.Close() objStream = File.Open("Empdata.bin", FileMode.Open) objEmpCopy = CType(objBinFormatter.Deserialize(objStream), CEmpData) objStream.Close() CreateDeepCopy = objEmpCopy Catch ex As Exception MsgBox(ex.ToString) End Try End Function Public Sub GetObjectData(ByVal info As System.Runtime.Serialization.SerializationInfo, ByVal context As System.Runtime.Serialization.StreamingContext) Implements System.Runtime.Serialization.ISerializable.GetObjectData Dim intIndex As Integer Dim objEmp As CEmp info.AddValue("emp_count", ArrEmp.Count) For intIndex = 0 To ArrEmp.Count - 1 objEmp = ArrEmp(intIndex) objEmp.GetObjectData(info, context, intIndex) Next End Sub Public Function GetEmpData() As String Dim intCount As Integer Dim strEmpData As String For intCount = 0 To ArrEmp.Count - 1 strEmpData = strEmpData & CType(ArrEmp(intCount), CEmp).FName & Chr(9) & CType(ArrEmp(intCount), CEmp).LName & Chr(13) Next GetEmpData = strEmpData End Function Public Sub ChangeEmpData() Dim objEmp As CEmp For Each objEmp In ArrEmp objEmp.FName = "FirstName" objEmp.LName = "LastName" Next End Sub End Class Public Class CEmp Private mstrFName As String Private mstrLName As String Public Property FName() As String Get FName = mstrFName End Get Set(ByVal Value As String) mstrFName = Value End Set End Property Public Property LName() As String Get LName = mstrLName End Get Set(ByVal Value As String) mstrLName = Value End Set End Property Public Sub New() End Sub Public Sub New(ByVal info As SerializationInfo, ByVal context As StreamingContext, ByVal intIndex As Integer) mstrFName = CStr(info.GetValue("emp_fname" & intIndex, GetType(String))) mstrLName = CStr(info.GetValue("emp_lname" & intIndex, GetType(String))) End Sub Public Sub GetObjectData(ByVal info As SerializationInfo, ByVal context As StreamingContext, ByVal intIndex As Long) info.AddValue("emp_fname" & intIndex, mstrFName) info.AddValue("emp_lname" & intIndex, mstrLName) End Sub End Class
|