我有一个带有字段的SQL视图:
To_char(date, 'MM-DD-YYYY')
我有一个带有DateTime属性的C#对象。基于从被序列化的数据库中检索的数据创建对象,然后将其反序列化到对象中。除DateTime字段外,所有工作都很好。根据从DB返回的日期的格式,我得到无效的XML错误,或者日期设置为01-01-0001
编辑:附加代码作为对评论的回复。
De-serialize method:
public static object DeSerialize<T>(string data)
{
StringReader rdr = new StringReader(data);
XmlSerializer xmlSerializer = new XmlSerializer(typeof(T));
var result = (T)xmlSerializer.Deserialize(rdr);
return result;
}
Class to be de-serialized:
public class VolumeData
{
public string name { get; set; }
public string study { get; set; }
public string group { get; set; }
public double volume { get; set; }
public DateTime date { get; set; }
}
原样使用:
List<VolumeData> volumeDataCollection = (List<VolumeData>)Serializer.DeSerialize<List<VolumeData>>(xmlData);
正如我所提到的,使用这些方法反序列化其他对象或此类中不属于DateTime的属性,我没有任何问题。
感谢。
答案 0 :(得分:2)
此页面描述了类似的问题:Force XmlSerializer to serialize DateTime as 'YYYY-MM-DD hh:mm:ss'
您可能会稍微作弊,并使用其他堆栈流页面上列出的date
标记您的[System.Xml.Serialization.XmlElementAttribute]
字段。
答案 1 :(得分:0)
我宁愿通过Linq到XML处理XML并以这种方式构建树。
答案 2 :(得分:0)
你得到的xml中的日期表示是什么样的?
以下内容对我有用:
string date1 = "04-20-2011";
string date2 = "02-02-2011";
VolumeData v1 = new VolumeData { date = DateTime.Parse(date1) };
VolumeData v2 = new VolumeData { date = DateTime.Parse(date2) };
XmlSerializer xmlSerializer = new XmlSerializer(typeof(VolumeData));
StringWriter w1 = new StringWriter();
xmlSerializer.Serialize(w1, v1);
string s1 = w1.ToString();
StringWriter w2 = new StringWriter();
xmlSerializer.Serialize(w2, v2);
string s2 = w2.ToString();
VolumeData v1a = (VolumeData)DeSerialize<VolumeData>(s1);
VolumeData v2a = (VolumeData)DeSerialize<VolumeData>(s2);
但是date属性(在s1中)的xml内容是:
<date>2011-04-20T00:00:00</date>