我创建了以下自定义类来处理特定字符串(“YYY-MM-DD”)作为动态今日值的表示。有一些扩展,缩小和ToString函数可以帮助程序员进行代码转换。
我的问题是当我反序列化时,使用XmlSerializer,一个使用MyDateTime的类。我虽然XmlSerializer会使用Narrowing Operator CType(rightSide As String) As MyDateTime
作为对象初始值设定项,但在重新编译它之前它会使用反射。
如果我希望使用Narrowing Operator CType(rightSide As String) As MyDateTime
启用MyDateTime的xml反序列化类属性,我该怎么办?
Public Class MyDateTime
Const cstUniversalTodayValue As String = "YYYY-MM-DD"
Dim _internalStringRepresentation As String
Dim _internaValue As MyDateTime
Public ReadOnly Property DynamicToday As Boolean
Get
Return _internalStringRepresentation = cstUniversalTodayValue
End Get
End Property
Public Shared Widening Operator CType(rightSide As MyDateTime) As MyDateTime
Return rightSide._internaValue
End Operator
Public Shared Widening Operator CType(rightSide As MyDateTime) As String
Return rightSide._internalStringRepresentation
End Operator
Public Shared Narrowing Operator CType(rightSide As MyDateTime) As MyDateTime
Return New MyDateTime With {._internalStringRepresentation = rightSide.ToString("yyyy-MM-dd"), ._internaValue = rightSide}
End Operator
Public Shared Narrowing Operator CType(rightSide As String) As MyDateTime
Dim instance = New MyDateTime With {._internalStringRepresentation = rightSide}
If instance.DynamicToday Then
instance._internaValue = DateTime.Today
Else
instance._internaValue = Convert.ToDateTime(rightSide)
End If
Return instance
End Operator
Public Overrides Function ToString() As String
Return Me
End Function
Public Overloads Function ToString(format As String) As String
Return _internaValue.ToString(format)
End Function
End Class
答案 0 :(得分:0)
XmlSerializer不使用类型转换。只需使用sgen工具为您的类型生成序列化程序集,然后通过Reflector浏览生成的代码,了解其工作原理。
XmlSerializer实例化执行其构造函数的类,并在以后填充其可序列化属性。
要确保正确序列化类的实例,请实现ISerializable接口。您还可以通过实现IXmlSerializable接口来更好地控制XML序列化过程。