【问题标题】:XML Custom serializationXML 自定义序列化
【发布时间】:2012-06-08 07:38:16
【问题描述】:

我从无法控制的 Web 服务中获取此 xml 字符串:

<foo>
   <BIRTHTIME>02.06.2012-01:34.41 1338593681</BIRTHTIME>
</foo>

目前,我将上面的xml字符串反序列化到这个类中:

Public Class AppData
    Public BIRTHTIME As String
End class

如您所见,AppData.BIRTHTIME 是字符串数据类型,但它必须是日期数据类型。我想要完成的是将 xml 字符串反序列化为此类:

Public Class AppData
    Public BIRTHTIME As Date
End class

问题是当我将 xml 反序列化为上述类时,我收到此错误“输入字符串的格式不正确。” .有人可以提供一个优雅的解决方案来解决这个问题吗?谢谢

【问题讨论】:

  • 1338593681 是关于什么的?它对您的 DateTime 值有任何意义吗?

标签: xml vb.net xml-serialization xml-parsing xsd


【解决方案1】:

您可以使用在(反)序列化时被忽略的属性来控制反序列化。

由于不清楚源日期字符串的最后一个数字部分代表什么,我的示例没有处理它 - 您可能需要扩展相应的 getter 和 setter 逻辑。

Public Class AppData
    Private birthdatetime As DateTime
    Private birthtimestring As String


    <XmlElement(ElementName := "BIRTHTIME")>
    Public Property DateString As String
        Get
            Return String.Format("{0:dd.MM.yyyy-HH:mm:ss} 1338593681", birthdatetime);
        End Get

        Set
            birthtimestring = Value
            Dim datetimepart As String() = birthtimestring.Split(New [Char]() {" "c})(0)
            Dim ci As New CultureInfo("de-DE")
            DateTime.TryParseExact(datetimepart, "dd.MM.yyyy-HH:mm:ss", ci, DateTimeStyles.None, birthdatetime)
        End Set
    End Property


    <XmlIgnore()>
    Public Property BirthDate As DateTime
        Get
            Return birthdatetime
        End Get

        Set
            birthdatetime = Value
        End Set
    End Property
End Class

免责声明:我并不真正精通 VB.Net,因此我从 C# 翻译的示例可能包含一些错误。如有任何错误,请随时编辑

【讨论】:

    【解决方案2】:

    我建议使用 IXmlSerializable 接口并自己解析属性,因为它格式错误。

    查看此页面以获取有关实施的更多信息:http://msdn.microsoft.com/en-us/library/system.xml.serialization.ixmlserializable.aspx

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-31
      • 2015-01-31
      • 2010-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多