我有一個關於泛型類的序列化的問題。序列化一個通用類(不需要XML幫助器類)
因爲我想用一個通用類爲我所有的配置(它獲取序列化爲XML)我寫了下面的類:
Imports System.Xml
Imports System.Xml.Serialization
Imports System.IO
Imports System.Reflection
Imports System.Reflection.Assembly
<Serializable()> _
Public Class GenericConfig(Of T)
Public Sub WriteToFile(ByVal FileName As String)
ConfigVersion = ProgrammVersion.ToString
Dim XmlFile As FileStream = New FileStream(FileName, FileMode.Create)
Dim serialize As XmlSerializer = New XmlSerializer(GetType(GenericConfig(Of T)), New Type() {GetType(GenericConfig(Of T))})
serialize.Serialize(XmlFile, Me)
XmlFile.Close()
End Sub
Public Shared Function ReadFromFile(ByVal FileName As String) As GenericConfig(Of T)
Dim XmlFile As FileStream = New FileStream(FileName, FileMode.Open)
Dim serialize As XmlSerializer = New XmlSerializer(GetType(GenericConfig(Of T)))
ReadFromFile = serialize.Deserialize(XmlFile)
XmlFile.Close()
Return ReadFromFile
End Function
Public Shared ReadOnly Property ConfigFileName() As String
Get
Return GetExecutingAssembly.Location.Substring(0, GetExecutingAssembly.Location.Length - 4) & ".Config.xml"
End Get
End Property
End Class
Public Class ToolConfig
Inherits GenericConfig(Of ToolConfig)
Public Property Key1 As String = "Value 1"
End Class
我的問題是,我不能序列化,因爲
serialize.Serialize(XmlFile, Me)
{「是沒有預料到的類型GenericConfigClass.ToolConfig。使用XmlInclude或SoapInclude屬性來指定不是靜態已知類型。」}在線以下錯誤
如果您在派生類上使用XMLSerializer,我已經使用了Google,發現了很多與該錯誤有關的文章。我在這裏沒有這樣做。我在泛型類上使用它。
難道還有比這樣的傢伙在這裏創建一個XML輔助類以外的其他方式: http://www.codeproject.com/Articles/35925/Generic-XML-Serialization-Methods
感謝,
沃爾夫岡
更新:
這是我怎麼稱呼它(簡短的例子)
Imports System.IO
Public Class frmMain
Dim Config As ToolConfig
Private Sub btnConfigInit_Click(sender As Object, e As EventArgs) Handles btnConfigInit.Click
'----------------- read config file -----------------
If File.Exists(ToolConfig.ConfigFileName) Then
Config = ToolConfig.ReadFromFile(ToolConfig.ConfigFileName)
Else
Config = New ToolConfig
End If
Config.WriteToFile(ToolConfig.ConfigFileName)
MsgBox(Config.Key1)
End Sub
End Class
請張貼類的代碼你想序列化 – 2013-03-04 12:28:02