2010-11-02 11 views
5

J'essaie d'analyser JSON simple à l'aide Json.netImpossible d'analyser les données en utilisant JavaScriptDateTimeConverter

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

et la propriété est définie

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

Mais DeserializeObject jeter une exception avec le message suivant: "Jeton inattendu ou valeur lors de l'analyse de la date Jeton: Date, Valeur: 10/15/2008 04:00:00"

Eh bien, pour autant que je sache, il a analysé date, n'est-ce pas? Cette exception est levée à partir de la ligne 68 dans les 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(); 

Dans ce lieu reader.TokenType est la date et reader.Value.ToString() est 10/15/2008 04:00:00. Des idées?

Répondre

6

Json.NET désérialise dates avec le format:

"\/Date(1224043200000)\/" 

par défaut. JavaScriptDateTimeConverter est pour les dates au format:

new Date(1234567890) 
+0

merci beaucoup, il est si intelligent que je ne peux pas croire)) –

0

J'ai eu un problème similaire il y a quelque temps. J'ai trouvé une solution de contournement et blogué à ce sujet:

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

Hope it helps.

+0

Non, ce n'est pas le cas. Il a écrit que si c'est "/ Date (1224043200000) /" cela ne marchera pas. Pendant que j'utilise "" \/Date (1224043200000) \/"". Je suppose que le problème est reader.TokenType doit être JsonToken.StartConstructor. Et cela signifie probablement que "\/est analysé comme ce jeton." –