タイトル | : 配列データの逆シリアル化で例外発生 |
記事No | : 5746 |
投稿日 | : 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>
|