我创建了三个类:
课程 阶段 cActivity
现在,我正在尝试序列化列表属性,并为我的两个类设置提供了以下代码:
cLesson.vb
<Serializable()> _
<System.Xml.Serialization.XmlInclude(GetType(List(Of cStage)))> _
Public Class cLesson
Private lStages As New List(Of cStage)
Public Sub addStage(sStage As String)
Dim oStage As New cStage
oStage.Title = sStage
lStages.Add(oStage)
End Sub
Public Sub listStages()
For Each oStage In lStages
MsgBox(oStage.Title)
Next
End Sub
End Class
cStage.vb
<Serializable> _
Public Class cStage
Private sTitle As String
Public Property Title() As String
Get
Return sTitle
End Get
Set(ByVal Value As String)
sTitle = Value
End Set
End Property
End Class
Form1.vb-序列化调用
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim xml_serializer As New Xml.Serialization.XmlSerializer(GetType(cLesson))
'Word document pointers
Dim pDoc As String
'Open master document
Dim fdFile As SaveFileDialog = New SaveFileDialog
fdFile.Title = "Save Reading Resource"
fdFile.Filter = "Dat Files|*.dat"
fdFile.RestoreDirectory = True
If fdFile.ShowDialog = Windows.Forms.DialogResult.OK Then
pDoc = fdFile.FileName
Dim stream_writer As New StreamWriter(pDoc, False)
Try
xml_serializer.Serialize(stream_writer, oLesson)
stream_writer.Close() ' close the file
Catch ex As Exception
MsgBox(ex.InnerException.ToString)
End Try
End If
End Sub
但是,当我运行该程序时,没有让list属性出现在XML中。
最后,我想上一堂课,其中列出了各个阶段,每个阶段可以有一个活动列表。
任何建议将不胜感激。我在网上看了很多东西,却找不到任何帮助。
将列表公开可以使其序列化。但是,我希望它是私有的。
公共步骤作为cStage的新列表
答案 0 :(得分:-1)
XML序列化仅适用于标记为Public
的字段和属性。引用官方文档文章Introducing XML Serialization:
XML序列化仅将对象的公共字段和属性值序列化为XML流。
(...)
XML序列化不会转换方法,索引器,私有字段或只读属性(只读集合除外)。要序列化所有对象的公共和私有字段和属性,请使用DataContractSerializer而不是XML序列化。
因此,您也可以切换到DataContractSerializer
来序列化私有字段,但是要使其与常规XML序列化(支持XML属性)一起使用,唯一的方法是将字段的声明更改为:>
Public lStages As New List(Of cStage)