0

「<MyType><StartDate>01/01/2000</StartDate></MyType>」をデシリアライズする方法

以下は MyType 定義です

[Serializable]
public class MyType
{
    DateTime _StartDate;
    public DateTime StartDate
    {
        set
        {
            _StartDate = value;
        }
        get
        {
            return _StartDate;
        }
    }
}

デシリアライズ中に次のエラーが発生しました

{"文字列 '01/01/2000' は有効な AllXsd 値ではありません。"} [System.FormatException]: {"文字列 '01/01/2000' は有効な AllXsd 値ではありません。"} データ: {システム.Collections.ListDictionaryInternal} HelpLink: null InnerException: null メッセージ: 「文字列 '01/01/2000' は有効な AllXsd 値ではありません。」ソース: "System.Xml" StackTrace: " at System.Xml.Schema.XsdDateTime..ctor(String text, XsdDateTimeFlags kind)\r\n at System.Xml.XmlConvert.ToDateTime(String s, XmlDateTimeSerializationMode dateTimeOption)\r\ System.Xml.Serialization.XmlCustomFormatter.ToDateTime(文字列値)\r\nで\r\nSystem.Xml.Serialization.XmlSerializationReader.ToDateTime(文字列値)\r\nでMicrosoft.Xml.Serialization.GeneratedAssembly.
Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderMyType.Read3_MyType()" TargetSite で: {Void .ctor (System.String, System.Xml.Schema.XsdDateTimeFlags)}

4

3 に答える 3

2

入力XMLを実際に制御できないが、それでも解析する必要がある場合(不適切であるにもかかわらず)、このようなことは私が過去に行ったことです。

[Serializable]
public class MyType
{
    DateTime _StartDate;
    public string StartDate
    {
        set
        {
            _StartDate = DateTime.Parse(value);
        }
        get
        {
            return _StartDate.ToShortDateString();
        }
    }
}
于 2010-04-21T17:41:16.450 に答える
1

おそらく、DateTime デシリアライザーは、そこにあるものとは異なる形式を想定しています。

私が使用する形式は次のようになります。

2010-01-20T13:40

(これは UTC DateTime 用です。文字列の末尾にタイムゾーンを含めることもできます)

私はこの形式を使用して [DataMember] プロパティで送信し、DataContractSerializer はそれをうまく処理するので、Xml シリアライゼーションでも機能すると思います。

ここで発生しているエラーについてのスレッドがあり、参考になるようです。

于 2010-04-21T16:15:06.743 に答える
0

要するに、あなたはそうではないと思います。問題は、がを値XmlSerializerに解析しようとするが、有効な XML 日付ではないことです。01/01/2000DateTime01/01/2000

XML 文字列はどのように作成されますか? そのコードを制御できますか? その場合は、メソッドを使用しXmlConvert.ToString(DateTime)て、標準に準拠した文字列を取得します。

于 2010-04-21T16:14:38.317 に答える