XMLシリアライズできないケースに対応する。DBNull.Valueに対応する。
■Object変数にDBNull.Valueを含む場合
System.InvalidOperationException が発生しました。
Message="XML ドキュメントを生成中にエラーが発生しました。"
Message="型 System.DBNull は指定されていません。スタティックに使用できない型を指定するには XmlInclude または SoapInclude 属性を使ってください。"
これは、System.DBNullがXMLシリアライズに対応していないために発生する問題で、XMLInclude属性を付けてSystem.DBNullが含まれる事を通知する必要があります。
_
Imports System.Xml
Imports System.Xml.Serialization
Imports System.IOPublic Class Form1
_
_
Public Class Item
Public Name As String = String.Empty
Public Value As Object = Nothing
End ClassPrivate Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim item As New Item
item.Name = "Taro"
item.Value = DBNull.ValueIf Convert.IsDBNull(item.Value) = True Then
item.Value = Nothing
End IfDim serializer As New XmlSerializer(GetType(Item))
Dim sw As New StreamWriter("c:\xml.txt")
serializer.Serialize(sw, item)
sw.Close()
Dim dt As New DataTable
dt.Columns.Add("ID", GetType(String))
dt.Columns.Add("NAME", GetType(String))Dim dr As DataRow = dt.NewRow
dr.Item("ID") = 1
dr.Item("NAME") = DBNull.Valuedt.Rows.Add(dr)
dt.TableName = "MASTER"
serializer = New XmlSerializer(GetType(DataTable))
sw = New StreamWriter("c:\xml.txt")
serializer.Serialize(sw, dt)
sw.Close()
End Sub
End Class