2010-11-02 2 views
5

Я пытаюсь разобрать простой JSON с помощью Json.netНевозможно разобрать данные, используя JavaScriptDateTimeConverter

string inputJson = @" 
       { 
       ""modificationTime"" : ""\/Date(1224043200000)\/"" 
       }"; 

И свойство определяется

[JsonProperty("modificationTime")] 
[JsonConverter(typeof(JavaScriptDateTimeConverter))] 
public DateTime ModificationTime { get; set; } 

Но DeserializeObject сгенерировано исключение со следующим сообщением: «Неожиданный токен или значение при разборе даты. Токен: Дата, значение: 10/15/2008 04:00:00«

Ну, насколько я вижу, на самом деле он проанализировал дата, не так ли? Это исключение из линии 68 в JavaScriptDateTimeConverter.cs:

68 if (reader.TokenType != JsonToken.StartConstructor || string.Compare(reader.Value.ToString(), "Date", StringComparison.Ordinal) != 0) 
69   throw new Exception("Unexpected token or value when parsing date. Token: {0}, Value: {1}".FormatWith(CultureInfo.InvariantCulture, reader.TokenType, reader.Value)); 
70  
71   reader.Read(); 

В этом месте reader.TokenType является дата и reader.Value.ToString() является 10/15/2008 4:00:00. Любые идеи?

ответ

6

Json.NET десериализует даты в формате:

"\/Date(1224043200000)\/" 

по умолчанию. JavaScriptDateTimeConverter предназначен для дат с форматом:

new Date(1234567890) 
+0

большое вам спасибо, он настолько умный, что я не могу поверить)) –

0

У меня была аналогичная проблема некоторое время назад. Я нашел обходной путь и писал о нем:

http://shico.blogspot.com/2010/07/ajaxpro-deserialize-json-datetime.html

Надеется, что это помогает.

+0

Нет, это не так. Он писал, что если это «/ Дата (1224043200000) /», то это не сработает. В то время как я использую "" \/Дата (1224043200000) \/"". Я предполагаю, что проблема - читатель. TokenType должен быть JsonToken.StartConstructor. И это, вероятно, означает, что «\/анализируется как этот токен. –

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