我有下面的类,我想序列化为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?
序列化是关于序列化实例的。Shared
变量不属于实例
你可以通过添加一个redirect实例属性来实现序列化。
例如:Public Property Var1Instance As Boolean
Get
Return Var1
End Get
Set(value As Boolean)
Var1 = value
End Set
End Property
我经常发现自己想实现自己的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。