3

我从无法控制的 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 反序列化为上述类时,我收到此错误“输入字符串的格式不正确”。. 有人可以提供一个优雅的解决方案来解决这个问题吗?谢谢

4

2 回答 2

0

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

由于不清楚源日期字符串的最后一个数字部分代表什么,我的示例没有处理它 - 您可能需要扩展相应的 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# 翻译的示例可能包含一些错误。随意编辑任何错误

于 2012-06-04T19:05:33.680 回答
0

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

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

于 2012-06-04T15:03:27.440 回答