C#XML将SQL Date字段反序列化为C#Datetime

时间:2011-04-20 12:35:55

标签: c# serialization

我有一个带有字段的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的属性,我没有任何问题。

感谢。

3 个答案:

答案 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>