2010-11-02 8 views
5

Ich versuche Json.netkönnen die Daten unter Verwendung von JavaScriptDateTimeConverter nicht analysieren

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

mit einfachen JSON zu analysieren und zu Eigenschaft definiert ist

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

Aber DeserializeObject eine Ausnahme mit der folgenden Meldung werfen: "Unerwartetes Token oder Wert beim Analysieren des Datums. Token: Datum, Wert: 10/15/2008 04:00:00"

Nun, soweit ich sehe, hat es tatsächlich geparst Datum, nicht wahr? Diese Ausnahme wird von der Linie 68 in dem JavaScriptDateTimeConverter.cs geworfen:

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(); 

An diesem Ort reader.TokenType ist Datum und reader.Value.ToString() ist 10/15/2008 04.00.00. Irgendwelche Ideen?

Antwort

6

Json.NET deserialisiert Daten mit dem Format:

"\/Date(1224043200000)\/" 

standardmäßig. JavaScriptDateTimeConverter ist für Daten im Format:

new Date(1234567890) 
+0

vielen Dank. Es ist so schlau, dass ich es nicht glauben kann)) –

0

Ich hatte vor einiger Zeit ähnliches Problem. Ich fand eine Abhilfe und darüber gebloggt:

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

Hoffe, es hilft.

+0

Nein, tut es nicht. Er schrieb, wenn es "/ Date (1224043200000) /" ist, dann wird es nicht funktionieren. Während ich "" \/Date (1224043200000) \/"" verwende. Ich vermute, das Problem ist Reader.TokenType sollte JsonToken.StartConstructor sein. Und es bedeutet wahrscheinlich, dass "\/wird wie dieser Token geparst. –

Verwandte Themen