タグ:

バイナリ形式

サンプルコード[VB.net]

Imports System.IO
Imports System.Runtime.Serialization
Imports System.Runtime.Serialization.Formatters.Binary

Sub Main()
  Dim fileName As String = "C:\test.obj"

  Dim Serial_Obj As Student = New Student With {.Name = "mike", _
                                                .Number = 1, _
                                                .Subjects = New String() { _
                                                  "Math", _
                                                  "Science", _
                                                  "English"} _
                                               }
  Dim Formatter As New BinaryFormatter
  'シリアライズ
  Using fs As New FileStream(fileName, FileMode.Create, FileAccess.Write)
    Formatter.Serialize(fs, Serial_Obj)
  End Using

  'デシリアライズ
  Dim Deserial_Obj As Student
  Using fs As New FileStream(fileName, FileMode.Open, FileAccess.Read)
    Deserial_Obj = CType(Formatter.Deserialize(fs), Student)
  End Using

End Sub

バイナリ形式が一番手軽ですが、ほかのアプリケーション等でデータを再利用が難しくなります。逆に言えば他のアプリケーションでデータの再利用をなくしたい場合は便利ですね。


XML形式

サンプルコード[VB.net]

Imports System.IO
Imports System.Xml.Serialization

<XmlRoot("Student")> _
Public Class Student
    <XmlElement("Number")> Public Number As Integer
    <XmlElement("Name")> Public Name As String
    <XmlArray("Subjects")> <XmlArrayItem("Subject")> Public Subjects() As String
End Class


Sub Main()
   Dim fileName As String = "C:\test.xml"
   Dim Converter As New XmlSerializer(GetType(Student))

   Dim Serial_Obj As Student = New Student With {.Name = "mike", _
                                                .Number = 1, _
                                                .Subjects = New String() { _
                                                  "Math", _
                                                  "Science", _
                                                  "English"} _
                                               }

   Using fs As New FileStream(fileName, System.IO.FileMode.Create)
      Converter.Serialize(fs, Serial_Obj)
   End Using

   Dim Deserial_Obj
   Using fs As New FileStream(fileName, System.IO.FileMode.Open)
      Deserial_Obj = CType(Converter.Deserialize(fs), Student)
   End Using

End Sub

シリアライズするクラス

上のサンプルではStudentクラスをシリアライズしています。クラスの各メンバはマークアップしていく必要があります。省略した場合はエレメントとして出力されます。

上のサンプルでは、"Subjects" XmlArrayを指定しています。XmlElementでも出力する事は出来ますが、XmlArrayは続けてXmlArrayItem を記入することで、子要素のエレメント名を指定することができます。


出力結果

<?xml version="1.0"?>
<Student xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Number>1</Number>
  <Name>mike</Name>
  <Subjects>
    <Subject>Math</Subject>
    <Subject>Science</Subject>
    <Subject>English</Subject>
  </Subjects>
</Student>


XML形式(文字列から)

サンプルコード[VB.net]

Imports System.IO
Imports System.Xml.Serialization

Sub Main()
   Dim ret As String

  Dim Serial_Obj As Student = New Student With {.Name = "mike", _
                                                .Number = 1, _
                                                .Subjects = New String() { _
                                                  "Math", _
                                                  "Science", _
                                                  "English"} _
                                               }
   'シリアライズ
   With New XmlSerializer(GetType(Student))
      Using sw As New StringWriter()
         .Serialize(sw, SerialObj)
         ret = sw.ToString
      End Using
   End With

   'デシリアライズ
   Dim DeserialObj As Student
   With New XmlSerializer(GetType(Student))
      Using sr As New StringReader(ret)
         DeserialObj = CType(.Deserialize(sr), Student)
      End Using
   End With
End Sub

例えば、オブジェクトの内容をデータベースに保存したい場合などは、StringWriterおよびStringReaderを使用します。


JOSN形式

サンプルコード[VB.net]

'以下の参照設定が必要です
'System.Runtime.Serialization.dll
'System.ServiceModel.Web.dll 

Imports System.Runtime.Serialization
Imports System.ServiceModel

'シリアライズするクラス
Public Class JsonData
  Public Sub New(ByVal Id As String, ByVal Name As String)
  Me.priId = Id
  Me.priName = Name
  Me.jointstr(0) = Id
  Me.jointstr(1) = Name
End Sub

Sub Main()
   Dim JsonQuery As New Dispatcher.JsonQueryStringConverter()

   'シリアライズ
   Dim json As String = JsonQuery.ConvertValueToString( _
                          New JsonData("001", "Json 先生"), _
                          GetType(JsonData))
   'デシリアライズ
   Dim JsonObj As JsonData = DirectCast( _
                               JsonQuery.ConvertStringToValue( _
                                 json, GetType(JsonData)), _
                               JsonData)

End Sub

JSON形式は有名ですね。個人的にはこれが一番好きですね。