我有一个类具有私有静态(共享,因为我在VB.BET中)字段及其关联的公共静态属性,因为它存储了一个应该对该类的所有实例都相同的变量。
My Class看起来像这样:
Public MustInherit Class NitrogenController
Private _active As Boolean
Private Shared _controlInterval As TimeSpan
Private _lastControlTime As Date
Public Property Active() As Boolean
Public Shared Property ControlInterval() As System.TimeSpan
'other properies that must be persisted
Public Function Control() As Boolean
If Not Now > _lastControlTime.Add(_controlInterval) Or Not _active Then
Return False
Else
DoControl()
_lastControlTime = Now
Return True
End If
End Function
End Class
当尝试二进制序列化这些类型的对象时问题到了,因为这个共享字段是正确存储的,并且在反序列化时返回其默认值。
我认为这是预期的行为,所以我的问题是......如何让共享字段持久化?我已经读过类似问题的一些评论,说这是一个糟糕的设计,但在我的情况下它确实有意义(AFAIK),因为这个变量对所有对象应该是相同的,但是可以由用户改变,因此应该存储。
你能建议另一种方式吗?
谢谢!
答案 0 :(得分:1)
在我看来,你所读到的内容是正确的。这可能是一个糟糕的设计。但是,如果必须,有两种方法可以使用XmlSerializer
执行此操作。简单的方法是简单地添加一个公共实例(非共享)属性,该属性具有一个getter和setter,它只是包装共享属性,例如:
Public MustInherit Class NitrogenController
Public Shared Property ControlInterval As TimeSpan
Public Property CurrentControlInterval() As TimeSpan
Get
Return ControlInterval
End Get
Set(value As TimeSpan)
ControlInterval = value
End Set
End Property
End Class
如果您对该方法不满意,则第二个更复杂的选项是通过实现ISerializable
接口来覆盖默认的序列化逻辑。