2011-04-20 46 views
1

我有一个字段一个SQL视图这样:C#XML解串行化SQL日期字段到C#日期时间

To_char(date, 'MM-DD-YYYY') 

我有一个DateTime性的C#对象。基于从序列化的数据库检索的数据创建对象,然后将其解序列化为对象。除了DateTime字段之外,所有的工作都很好。根据从数据库返回的日期格式,我要么收到无效的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内这些方法反序列化其他物体,或性能没有问题。

谢谢。

+2

您可能需要发布更多一些代码。 – Nick 2011-04-20 12:37:40

回答

0

我宁愿通过Linq将XML处理成XML,然后通过这种方式构建树。

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); 

但是对于日期属性(在S1)的XML内容是:

<date>2011-04-20T00:00:00</date>