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

(逆)シリアル化時に無視されるプロパティを使用して、逆シリアル化を制御できます。

ソース日付文字列の最後の数値部分が私の例ではそれを処理していないことを示しているかどうかが明確でないため、対応するゲッターおよびセッターロジックを拡張する必要がある場合があります。

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 に答える