2011-12-27 5 views
3

Я получаю дату JSON в following format:Анализировать формат даты с помощью Json.NET

"launch_date": 1250553600 

Как следует изменить следующий включать пользовательскую DateTime анализатор, который позволяет мне преобразовать это число в DateTime объект?

JsonConvert.DeserializeObject<NTask>(json); 

public sealed class NTask 
{ 
    public DateTime launch_date { get; set; } 
} 

В качестве альтернативы я мог бы использовать long, а затем разобрать его на другом поле, но я предпочел бы не делать этого, и есть JsonConvert автоматически разобрать его на DateTime через некоторый конвертер.

+2

Вы видели это: http://stackapps.com/questions/1175/how-to-convert-unix-timestamp-to-net-datetime –

+0

Этот вопрос задан 19 часов назад http://stackoverflow.com/questions/8639315/how-to-create-a-json-net-date-to-string-custom-converter/8639415 # 8639415 –

+0

@Babcock отличная ссылка, спасибо! Если вы хотите опубликовать его в качестве ответа, я его выберу. – bevacqua

ответ

1

Вот код, чтобы сделать это:

// This is an example of a UNIX timestamp for the date/time 11-04-2005 09:25.  
double timestamp = 1113211532; 

// First make a System.DateTime equivalent to the UNIX Epoch.  
System.DateTime dateTime = new System.DateTime(1970, 1, 1, 0, 0, 0, 0); 

// Add the number of seconds in UNIX timestamp to be converted.  
dateTime = dateTime.AddSeconds(timestamp); 

Для кода:

JsonConvert.DeserializeObject<NTask>(json); 

    public sealed class NTask 
    { 
     public DateTime launch_date { get; set; } 

     public void SetLaunchDate(int timestamp) 
     { 
      // First make a System.DateTime equivalent to the UNIX Epoch.  
      var dateTime = new DateTime(1970, 1, 1, 0, 0, 0, 0); 

      // Add the number of seconds in UNIX timestamp to be converted.  
      launch_date = dateTime.AddSeconds(timestamp); 
     } 
    } 

Затем, когда вы десериализации JSON, проверьте, чтобы увидеть, если launch_date имеет тип int или DateTime и переключите, как вы устанавливаете объект на основе типа!