如何反序列化“<mytype> <startdate> 01/01/2000 </startdate> </mytype>”

时间:2010-04-21 16:02:19

标签: c# serialization xml-deserialization

如何反序列化“&lt; MyType&gt;&lt; StartDate&gt; 01/01 / 2000&lt; / StartDate&gt;&lt; / MyType&gt;”

下面是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值。“}       数据:{System.Collections.ListDictionaryInternal}       HelpLink:null       InnerException:null       消息:“字符串'01 / 01/2000'不是有效的AllXsd值。”       来源:“System.Xml”       StackTrace:“在System.Xml.Schema.XsdDateTime..ctor(String   text,XsdDateTimeFlags种类)\ r \ n at   System.Xml.XmlConvert.ToDateTime(字符串   s,XmlDateTimeSerializationMode   dateTimeOption)\ r \ n at   System.Xml.Serialization.XmlCustomFormatter.ToDateTime(字符串   价值)\ r \ n at   System.Xml.Serialization.XmlSerializationReader.ToDateTime(字符串   价值)\ r \ n at   Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderMyType.Read2_MyType(布尔   isNullable,Boolean checkType)\ r \ n
  在   Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderMyType.Read3_MyType()”       TargetSite:{Void .ctor(System.String,   System.Xml.Schema.XsdDateTimeFlags)}

3 个答案:

答案 0 :(得分:2)

如果你真的无法控制输入XML但仍需要解析它(尽管是不合适的),这样的事情就是我过去所做的。

[Serializable]
public class MyType
{
    DateTime _StartDate;
    public string StartDate
    {
        set
        {
            _StartDate = DateTime.Parse(value);
        }
        get
        {
            return _StartDate.ToShortDateString();
        }
    }
}

答案 1 :(得分:1)

可能DateTime反序列化器需要与您所拥有的格式不同的格式。

我使用的格式如下:

2010-01-20T13:40

(这是一个UTC DateTime,你也可以在字符串的末尾有时区)

我使用这种格式发送到[DataMember]属性,DataContractSerializer处理它很好,所以我想它也适用于Xml序列化。

有一个关于您获得here错误的帖子看起来可能会有所帮助。

答案 2 :(得分:0)

简而言之,我认为你没有。您的问题是XmlSerializer尝试将01/01/2000解析为DateTime值,但01/01/2000不是valid XML date

如何创建XML字符串?你能控制那段代码吗?如果是这样,请使用XmlConvert.ToString(DateTime)方法获取符合标准的字符串。