XDocument и чтение xsi: nil = "true" дает "Строка не была распознана как допустимый DateTime" - PullRequest
0 голосов
/ 08 марта 2011

Счастливо читать 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, а просто взять ноль и вставить в datatable

Ответы [ 2 ]

1 голос
/ 08 марта 2011

Объявите 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.

0 голосов
/ 08 марта 2011

Linq to XML изначально не поддерживает xsi:nil, также посмотрите эту социальную ссылку msdn . В качестве обходного пути вам нужно будет выполнить ручную проверку, а затем либо назначить какое-либо значение по умолчанию для вашей даты (т. Е. 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
          }
...