tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルImageのシリアライズ化
記事No6021
投稿日: 2007/08/07(Tue) 13:27
投稿者ダンボ
下記のようなクラスを作って定義ファイルのシリアライズ化をしています。
ところがイメージデータがあると(TitleImageにインスタンスがあると)
シリアライズエラーが起きます。

折角エラーメッセージが表示されているのに対処方法が理解できません(泣)
具体的にどう直せば良いでしょうか?

『XML ドキュメントを生成中にエラーが発生しました。 ---> System.InvalidOperationException:
型 System.Drawing.Bitmap は指定されていません。スタティックに使用できない型を指定するには
XmlInclude または SoapInclude 属性を使ってください』

Public Class SheetDefFormat
    Public Title As String '
    Public TitleImage As Image '<------Nothingがセットされている場合はシリアライズ可
    Public Description As String '
    Public LastLookPic As Integer
    Public LastLookPage As Integer
    Public LastAccess As Date
    Public Pics As System.Collections.Specialized.StringCollection
End Class

Private innerSheetDef As SheetDefFormat
Private innerSheetFilePath As String
Private innerSheetModified As Boolean

Public Function SaveAs(ByVal Inifile As String, ByVal Force As Boolean) As Boolean
    If Force OrElse System.IO.File.Exists(Inifile) Then
        Try
            Dim Serializer As New System.Xml.Serialization.XmlSerializer(GetType(SheetDefFormat))
            Dim FS As New System.IO.FileStream(Inifile, System.IO.FileMode.Create)
            Serializer.Serialize(FS, innerSheetDef)
            FS.Close()
            innerSheetModified = False
            SaveAs = True
        Catch ex As Exception
            MsgBox("Write error : SheetDef -" & ex.Message)
            SaveAs = False
        End Try
    Else
        SaveAs = False
    End If
End Function

[ツリー表示へ]
タイトルRe: Imageのシリアライズ化
記事No6024
投稿日: 2007/08/07(Tue) 22:16
投稿者Hongliang
とりあえず、そこに書かれているクラスをヘルプで調べるぐらいはしましょう。
解説とサンプルコードにばっちり書かれてたりしますから。
で、そこで書かれているのが分からないって時に、
その分からないところを聞いてください。

// でも確か Image/Bitmap インスタンスってまともには
// XmlSerialize できなかったような気がする。

[ツリー表示へ]
タイトル[断念]Imageのシリアライズ化
記事No6084
投稿日: 2007/08/10(Fri) 10:54
投稿者ダンボ
Hongliangさん、どうも有り難うございます。

2日間ほどもがいてみたのですが、コンパイルエラーさえ取れない状態です。
『XmlInclude または SoapInclude 属性を使ってください』

・ Public TitleImage As XmlImage  'としてシリアライズ可能な新しい型を定義する
または、
・ Dim Serializer As New System.Xml.Serialization.XmlSerializer(GetType(SheetDefFormat),第2引数,第3引数)
あたりを勉強するのかなと思いますが、今回は断念します。

すっぱい葡萄の言い訳は、
・バイナリデータをXml化しても良い事は何も無い。
 Human Readabilityは下がるしファイル容量は増大するし処理速度は遅くなるし。
・バイナリXmlというのがそのうちできそうだから、できてから移行を考える。

なお、TitleImageは136x102ピクセルの画像で他モジュールでImageListに入れて
一覧表示に使います。今回は各イメージをjpegファイル等に保存しそのファイルパス
をSheetDefクラス(SheetDef.xml)で管理するように外部仕様を変更しました。

[ツリー表示へ]