2013-07-16 2 views
0

Я использую LINQ для JSON.NET для JSON для анализа данных, которые включают даты. Мой образец JSON выглядит так:Сводные даты с использованием JSON.NET

{"2013" : [ 
    { "date":"2/5/2013 11:13 AM","id":23 }], 
"2012" : [ 
    { "date":"28/9/2012 5:29 PM","id":24 }] 
} 

Формат даты в d/m/yyyy h: mm. Я попытался разборе его первым использованием DateTime.Parse:

var postTitles = jobject.Children().SelectMany(x => x.First). 
    Select(p => 
    new Report 
     { 
      Date = DateTime.Parse((string)p["date"]), 
      Height = (int)p["height"] 
     }); 

Однако бросает FormatException на вторую дату, поэтому я попытался с помощью DateTime.ParseExact вместо:

var postTitles = jobject.Children().SelectMany(x => x.First). 
    Select(p => 
    new Report 
     { 
      Date = DateTime.ParseExact(p["date"].ToString(), "dd/mm/yyyy hh:mm", new 
       CultureInfo("en-US")), 
      Height = (int)p["height"] 
     }); 

На этот раз, я получаю FormatException на первое свидание. Есть ли альтернативы в том, как разбирать эти даты? Я пытался использовать методы расширения, поскольку я привык делать XML, но, похоже, мои методы расширения не распознаются.

ответ

4

Ваш формат строки для ParseExact очень сломан. В принципе, вам действительно нужно обратить внимание на формат ваших фактических данных и посмотреть на MSDN documentation for custom date/time strings. Вы не можете просто положить какой-либо старый шаблон и ожидать, что он будет работать: он должен соответствовать вашим данным.

Возможно, вам нужна строка формата «d/M/yyyy h: mm tt». Я также хотел бы предложить, используя инвариант культуры:

Date = DateTime.ParseExact(p["date"].ToString(), "d/M/yyyy h:mm tt", 
          CultureInfo.InvariantCulture); 

(Инвариантная культура в основном та же, как и культура США, но важным аспектом является то, что он указывает на то, что это предназначено для машинно генерируемых данных, а не по-настоящему США -центральные данные.)

В JSON.NET может быть лучший способ сделать это, но это должно быть, по крайней мере, отправной точкой.

+0

Не могли бы вы рассказать мне о форматировании строки? Я довольно смущен, поскольку использование образца в документации MSDN для ToString. – CCCC

+0

@CCCC: Трудно дать вам дальнейшее просветление, не зная, где ваше замешательство. –

+0

Из того, что я понимаю, спецификаторы формата извлекают определенные части даты, такие как месяц, день и год, для чего требуется правильно отформатированная дата. То, что я пытаюсь сделать, - это преобразовать данные, найденные в файле JSON, в правильно отформатированную дату. – CCCC

Смежные вопросы