VB.Net/File Directory/Serialize Object

Материал из VB Эксперт
Версия от 15:45, 26 мая 2010; Admin (обсуждение | вклад) (1 версия)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

Save Serializable Object to binary file: create a sequential-access file

<source lang="vbnet"> Imports System.IO Imports System.Collections Imports System.Windows.Forms Imports System.Runtime.Serialization.Formatters.Binary Imports System.Runtime.Serialization Public Class MainClass

  Public Shared Sub Main()
        Dim formatter As BinaryFormatter = New BinaryFormatter()
        Dim output As FileStream
        Dim fileName As String = "test.dat"
        Dim employee As Employee = New Employee("First Name", "Last Name")
        Try
           output = New FileStream(fileName,FileMode.OpenOrCreate, FileAccess.Write)
 
           formatter.Serialize(output, employee)
           output.Close()
 
        Catch fileException As FileNotFoundException
           Console.WriteLine("File Does Not Exits")
        Catch serializableException As SerializationException
           Console.WriteLine("Error Writing to File")
        Catch formattingException As FormatException
           Console.WriteLine("Invalid Format")
        Catch e As IOException
           Console.WriteLine("Cannot close file")
        End Try
  End Sub

End Class <Serializable()> Public Class Employee

  Private firstName, lastName As String
  Public Sub New(ByVal first As String, ByVal last As String)
     firstName = first
     lastName = last
  End Sub 
  Public Overrides Function ToString() As String
     Return firstName & " " & lastName
  End Function 

End Class


 </source>


Serializable Person Object

<source lang="vbnet"> Imports System.IO Imports System.Runtime.Serialization.Formatters.Binary Imports System.Runtime.Serialization.Formatters.Soap Public Class MainClass

   Public Shared Sub Main()
       Dim Bob As New SerializablePerson("Bob", 34, 5.25)
       Dim fs As New FileStream("c:\bob.dat", FileMode.Create)
       Dim f As System.Runtime.Serialization.IFormatter
       f = New SoapFormatter()
       "f = New BinaryFormatter()
       f.Serialize(fs, Bob)
       fs.Close()
       Bob = Nothing
       fs = New FileStream("c:\bob.dat", FileMode.Open)
       Bob = CType(f.Deserialize(fs), SerializablePerson)
       System.Console.WriteLine(Bob.Name)
       fs.Close()
   End Sub

End Class <Serializable()> Public Class SerializablePerson

   Public Name As String
   Public Age As Integer
   Public Height As Integer
   Public Sub New()
   End Sub
   Public Sub New(ByVal Name As String, ByVal Age As String, _
     ByVal Height As String)
       Me.Name = Name
       Me.Age = Age
       Me.Height = Height
   End Sub

End Class


 </source>


Serialize Data to Binary and XML at the same time

<source lang="vbnet"> Imports System Imports System.IO Imports System.Data Imports System.Data.SqlClient Imports System.Runtime.Serialization.Formatters.Binary public class MainClass

  Shared Sub Main()
     "Create Connection object
     Dim thisConnection As New SqlConnection("server=(local)\SQLEXPRESS;" & _
         "integrated security=sspi;database=MyDatabase")
     Dim sql As String = "SELECT * FROM Employee"
     Dim fs As New FileStream("Employee.bin",FileMode.Create)
     Try
        " Create Data Adapter
        Dim da As New SqlDataAdapter
        da.SelectCommand = New SqlCommand(sql, thisConnection)
        " Create and fill Dataset
        Dim ds As New DataSet
        da.Fill(ds, "Employee")
        " Extract DataSet to XML file
        ds.WriteXml("Employee.xml")
        " Create binary formatter
        Dim bf As New BinaryFormatter()
        " Specify binary serialization for dataset
        ds.RemotingFormat = SerializationFormat.Binary
        " Output dataset
        bf.Serialize(fs, ds)
     Catch ex As SqlException
        Console.WriteLine("Error: " & ex.ToString())
     Finally
        fs.Close()
        thisConnection.Close()
        Console.WriteLine("Connection Closed")
     End Try
  End Sub

End Class


 </source>


Serialize Object to XML Stream and output to screen

<source lang="vbnet"> Imports System Imports System.Xml Imports System.Xml.Serialization

Public Class MainClass

   Shared Sub Main(  )
      Dim serialize As XmlSerializer = _
             New XmlSerializer(GetType(Order))
      Dim MyMovieOrder As Order = _
             New Order("Name", 101, 10)
      serialize.Serialize(Console.Out, MyMovieOrder)
      Console.Out.WriteLine()
   End Sub
 

End Class Public Class Order

   Public name As String
   Public id As Integer
   Public quantity As Integer
   Public Sub New()
   End Sub
   Public Sub New(ByVal name As String, _
                  ByVal id As Integer, _
                  ByVal quantity As Integer)
       Me.name = name
       Me.id = id
       Me.quantity = quantity
   End Sub

End Class


 </source>


Serialize to Xml

<source lang="vbnet">

Imports System Imports System.IO Imports System.Xml Imports System.Xml.Serialization

   Public Class MainClass
       Public Shared Sub Main()
           Dim roster = New EmployeeCollection(DateTime.Now)
           Dim employees = New Employee() _
               {New Employee With {.Id = 1, .Name = "A", _
                                   .Title = "Coder", _
                                   .HireDate = DateTime.Now, _
                                   .HourlyRate = 100.0}, _
                New Employee With {.Id = 4, .Name = "B", _
                                   .Title = "Coder", _
                                   .HireDate = DateTime.Now, _
                                   .HourlyRate = 100.75}}
           roster.Employees = employees
           Dim serializer As New XmlSerializer(GetType(EmployeeCollection))
           Dim fs As New FileStream("EmployeeCollection.xml", FileMode.Create)
           serializer.Serialize(fs, roster)
           fs.Close()
           roster = Nothing
           fs = New FileStream("EmployeeCollection.xml", FileMode.Open)
           roster = DirectCast(serializer.Deserialize(fs), EmployeeCollection)
           serializer.Serialize(Console.Out, roster)
       End Sub
   End Class
   <XmlRoot("EmployeeCollection")> _
   Public Class EmployeeCollection
       <XmlElement(ElementName:="LastUpdated", datatype:="date")> _
       Public LastUpdated As DateTime
       <XmlArray("Employees"), XmlArrayItem("Employee")> _
       Public Employees As Employee()
       Public Sub New()
       End Sub
       Public Sub New(ByVal update As DateTime)
           Me.LastUpdated = update
       End Sub
   End Class
   Public Class Employee
       <XmlElement("Name")> _
       Public Name As String = String.Empty
       <XmlElement("Title")> _
       Public Title As String = String.Empty
       <XmlElement(ElementName:="HireDate", datatype:="date")> _
       Public HireDate As DateTime = Date.MinValue
       <XmlElement("HourlyRate")> _
       Public HourlyRate As Decimal = 0
       <XmlAttribute(AttributeName:="id", DataType:="integer")> _
       Public Id As String = String.Empty
       Public Sub New()
       End Sub
       Public Sub New(ByVal employeName As String, ByVal employeeTitle As String, ByVal employeeHireDate As DateTime, ByVal employeeHourlyRate As Decimal)
           Me.Name = employeName
           Me.Title = employeeTitle
           Me.HireDate = employeeHireDate
           Me.HourlyRate = employeeHourlyRate
       End Sub
   End Class
  
   
 </source>


Simple Serializable Person Object

<source lang="vbnet"> Imports System.IO Public Class MainClass

   Public Shared Sub Main()
       Dim Bob As New Person("Bob", 34, 5.25)
       Bob.SaveToFile("c:\a.bin")
       Bob = Nothing
       Bob = Person.LoadFromFile("c:\a.bin")
       System.Console.WriteLine(Bob.Name)
   End Sub

End Class Public Class Person

   Public Name As String
   Public Age As Integer
   Public Height As Integer
   Public Sub New()
   End Sub
   Public Sub New(ByVal Name As String, ByVal Age As String, ByVal Height As String)
       Me.Name = Name
       Me.Age = Age
       Me.Height = Height
   End Sub
   Public Sub SaveToFile(ByVal Filename As String)
       Dim fs As New FileStream(Filename, FileMode.Create)
       Dim w As New BinaryWriter(fs)
       w.Write(Name)
       w.Write(Age)
       w.Write(Height)
       w.Close()
   End Sub
   Public Shared Function LoadFromFile(ByVal Filename As String) As Person
       Dim fs As New FileStream(Filename, FileMode.Open)
       Dim r As New BinaryReader(fs)
       Dim NewPerson As New Person()
       NewPerson.Name = r.ReadString()
       NewPerson.Age = r.ReadInt32()
       NewPerson.Height = r.ReadInt32()
       r.Close()
       Return NewPerson
   End Function

End Class


 </source>