tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
[ツリー表示へ]  [ワード検索]  [Home]

タイトル 配列データの逆シリアル化で例外発生
投稿日: 2007/06/29(Fri) 11:54
投稿者ダンボ
> My.Settingはプロジェクト独立? - ダンボ 07/06/25-12:09 No.5703 )
の続きです。

「iniファイルはXMLに移行」することにし、Serializerクラスを利用しました。
(よねKENさんおっしゃるとおり簡単ですね。データ構造クラスを定義して読み書きですか)
サンプルは下記から入手しました(DOBONさんありがとうございます)。
http://dobon.net/vb/dotnet/file/xmlserializer.html

で、配列データがない場合はうまく行くのですが、配列Folders()を追加すると、書き込みOK・読み込み例外
が起きてしまいます。どこが悪いか分からないので、皆さんご指摘お願いします。

    Public Class CommonData
        Public VER As String 'App Version
        Public Sort As Short 'Sort type
        Public PopUp As Short 'Popup speed
        Public EForm As Short 'Explorer Form
        Public DForm As String 'Date Form
        Public OForm As String 'Order Form
        Public Folders() As String 'Registered Folders
        Sub New()       'Constructor
            VER = "2.0"
            Sort = 1
            PopUp = 1
            EForm = 1
            DForm = "YYYYMMDD"
            OForm = "000"
            Folders = Nothing
        End Sub
    End Class
    Public IniData As CommonData

    Public Function ReadIni() As CommonData
        Dim Inifile As String ' 初期設定ファイルパス
        Inifile = My.Application.Info.DirectoryPath & "\DEF.xml"
        If PathFileExists(Inifile) = 0 Then
            IniData = New CommonData
        Else
            Dim Serializer As _
                New System.Xml.Serialization.XmlSerializer(GetType(CommonData))
            Dim FS As New System.IO.FileStream(Inifile, System.IO.FileMode.Open)
            IniData = CType(Serializer.Deserialize(FS), CommonData)
            FS.Close()
        End If

   Public Function WriteIni() As Boolean
        Dim Inifile As String ' 設定ファイルパス
        Inifile = My.Application.Info.DirectoryPath & "\Def.xml"
        Try
            Dim Serializer As New System.Xml.Serialization.XmlSerializer(GetType(CommonData))
            Dim FS As New System.IO.FileStream(Inifile, System.IO.FileMode.Create)
            Serializer.Serialize(FS, IniData)
            FS.Close()
        Catch ex As Exception
            MsgBox("AA")
        End Try

書き込まれたDef.xmlの内容。(ReadIniで読ませると例外発生します)
<?xml version="1.0"?>
<CommonData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <VER>1.0.18216</VER>
  <Sort>0</Sort>
  <PopUp>1</PopUp>
  <EForm>0</EForm>
  <DForm>YYYYMMDD</DForm>
  <OForm>000</OForm>
  <Folders>
    <string>0=Folder0</string>
    <string>1=Folder1</string>
    <string>2=Folder2</string>
    <string>3=Folder3</string>
  </Folders>
</CommonData>

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。