XDocument和读取xsi:nil =“true”给出“字符串未被识别为有效的DateTime”

时间:2011-03-08 03:50:02

标签: c# linq-to-xml xml-nil

快乐阅读XML
var q2 = from c in xmlDoc.Descendants("Ticket")
         select new
                { Responded_Date = (DateTime)c.Element("Responded_Date") }

但是当标签是

<Responded_Date xsi:nil="true" />

我得到“字符串未被识别为有效的DateTime”。我不希望使用null合并运算符,只是将null和insert插入datatable

2 个答案:

答案 0 :(得分:1)

将Responded_Date声明为可以为空的日期时间。

var q2 = from c in xmlDoc.Descendants("Ticket")
         select new { Responded_Date = (DateTime?)c.Element("Responded_Date") };

如果缺少<Responded_Date>元素,则返回空值。

如果它是无效日期,您将获得 FormatException - “字符串未被识别为有效的DateTime。”。 <Responded_Date xsi:nil="true" />将导致FormatException。

答案 1 :(得分:0)

Linq to XML本身不支持xsi:nil,另见msdn social link。作为一种解决方法,您需要做的是手动检查,然后为您的日期指定一些默认值(即DateTime.MaxValue)或使用类投影而不是匿名类型并将null赋给可空的DateTime?属性。

匿名类型Responded_Date类型DateTime

 select new
          { 
            Responded_Date = c.Element("Responded_Date").Value!="" 
                             ? (DateTime)c.Element("Responded_Date")
                             : DateTime.MaxValue
          }

使用自定义类投影(Responded_Date类型DateTime?):

 select new MyFoo()
          { 
            Responded_Date = c.Element("Responded_Date").Value!="" 
                             ? (DateTime)c.Element("Responded_Date")
                             : null
          }