タグ:

シリアライズするクラス

サンプルコード

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

<XmlElement("要素名")>" は 省略できます。省略した場合はエレメントとして出力されます。

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


XML形式でのシリアライズ/デシリアライズ

サンプルコード

Imports System.IO
Imports System.Xml.Serialization

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

出力結果

<?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>

文字列からシリアライズ

サンプルコード

Imports System.IO
Imports System.Xml.Serialization

Sub Main()
   Dim ret As String

   Dim SerialObj 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