我有以下要将其序列化为XML的类:
<Serializable()> _
Public Class Settings
Public Shared var1 As Boolean = False
Public var2 As Boolean = False
End Class
我创建了一个新实例并使用我自己的方法将其序列化......
SaveSerialXML(PathToFile, New Settings, GetType(Settings))
...但是共享(静态)变量不包含在输出中:
<?xml version="1.0" encoding="utf-8"?>
<Settings>
<var2>false</var2>
</Settings>
有没有人知道将类的共享成员序列化为XML的方法吗?
答案 0 :(得分:2)
序列化是关于序列化实例。 Shared
变量不属于实例。
答案 1 :(得分:1)
您可以作弊添加重定向实例属性以进行序列化。
例如:
Public Property Var1Instance As Boolean
Get
Return Var1
End Get
Set(value As Boolean)
Var1 = value
End Set
End Property
答案 2 :(得分:0)
我经常发现自己想要实现自己的Xml序列化,而不是使用.NET XmlSerializer。
我这样做是通过向我的类添加一个Xml属性,通过 Xml Literals 直接处理序列化。该属性可以是String
或XElement
,具体取决于我将如何使用它。
以下是Xml String属性在样本类中的显示方式:
Public Property Xml() As String
Get
Return <Settings>
<var1><%= var1 %></var1>
<var2><%= var2 %></var2>
</Settings>.ToString
End Get
Set(ByVal value As String)
Dim xValue = XElement.Parse(value)
var1 = xValue...<var1>.Value = "true"
var2 = xValue...<var2>.Value = "true"
End Set
End Property
这会将所有序列化逻辑放在一个位置,并避免使用属性来控制实例的序列化方式。我发现的另一个好处是,这允许我反序列化没有默认构造函数的类。
在生产场景中,我会添加一个扩展方法,将String
转换为Boolean
,而不是与"true"
进行比较,因为有效的Xml布尔值包括true,false,1和0。