如何反序列化“< 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值。“} 数据:{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)}
答案 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)
方法获取符合标准的字符串。