►index

     スポンサーサイト

    --------

    上記の広告は1ヶ月以上更新のないブログに表示されています。
    新しい記事を書く事で広告が消せます。

     VB.NET クラスオブジェクト シリアル化,逆シリアル化

    2013-05-26

    通常のユーザクラスは、シリアル化してXMLファイルに保存し、必要な時に復元(逆シリアル化)して再びクラスオブジェクトとして利用することができます。
    シリアル化、逆シリアル化を行うサンプルプロシジャーを作成してみました。

    【使用例】
    ’シリアル化
    Dim testcls as New TestClass
    testcls.Property1=1

    Call Serialize(testcls,”testcls.xml”)

    ’逆シリアル化
    Dim testcls as TestClass
    testcls = DeSerialize(OF TestClass)(”testcls.xml”)

     


    Imports System.Xml.Serialization

           

    ''' <summary>

            ''' シリアル化

            ''' オプジェクトをXMLファイルに収録する。

            ''' (クラスをpObjに指定した場合は、プロパティーの値がXMLに保存される。)

            ''' </summary>

            ''' <param name="pObj">シリアル化したいクラスオブジェクト</param>

            ''' <param name="pXmlPath">出力xmlファイルパス</param>

            Sub Serialize(ByVal pObj As Object, ByVal pXmlPath As String, _

                 Optional ByVal pEncoding As Encoding = Nothing)

                Dim sr As New XmlSerializer(pObj.GetType)

                Try

                    Dim enc As Encoding

                    If pEncoding Is Nothing Then

                        enc = Text.Encoding.Default

                    Else

                        enc = pEncoding

                    End If

     

                    Dim wr As New StreamWriter(pXmlPath, False, enc)

                    sr.Serialize(wr, pObj)

                    wr.Close()

                Catch ex As Exception

                    MsgBox ex.Message

                End Try

     

                sr = Nothing

            End Sub


    ''' <summary>

            ''' 逆シリアル

            ''' XMLファイルよりクラスのインスタンスを復元する。

            '''

            ''' </summary>

            ''' <typeparam name="T">逆シリアル化先クラス</typeparam>

            ''' <param name="pXmlPath">逆シリアル対象XMLファイルパス</param>

            Function DeSerialize(Of T)(ByVal pXmlPath As String, _

                          Optional ByVal pEncoding As Encoding = Nothing) As T

                Dim sr As New XmlSerializer(GetType(T))

                Try

                    Me.IsError = False

     

                    'Encoding

                    Dim enc As Encoding

                    If pEncoding Is Nothing Then

                        enc = Text.Encoding.Default

                    Else

                        enc = pEncoding

                    End If

     

     

                    If IO.File.Exists(pXmlPath) = False Then

                        Return Nothing

                    End If

     

                    '逆シリアル化

                    Using r As New System.IO.StreamReader(pXmlPath, enc)

     

                        Return CType(sr.Deserialize(r), T)

     

                    End Using

     

                Catch ex As Exception

                    MsgBox ex.Message

                End Try

            End Function

     

     

     


    トラックバック

    コメントの投稿

    非公開コメント

    PR
    上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。