DataContractJsonSerializer - Deserialisierung von DateTime innerhalb von Listobject

8

Ich habe Probleme mit der System.Runtime.Serialization.Json.DataContractJsonSerializer class zum Deserialisieren von DateTime-Instanzen, die in einem List<object> enthalten sind. Ich kann DateTime scheinbar nicht wieder in den ursprünglichen Typ deserialisieren. Das DataContractJsonSerializer deserialisiert es immer in einen String-Typ mit dem Format "/Date(1329159196126-0500)/" . Es wird serialisiert und deserialisiert, wenn ich es mit einem stark typisierten List<DateTime> durchführe, aber ich suche nach einer Möglichkeit, den Serializer zu veranlassen, DateTimes zu identifizieren und richtig zu deserialisieren, wenn er in einer einfachen Liste oder einem Array von object / p>

Beachten Sie, dass DateTimes der einzige Typ neben Primitiven und Strings sind, die diese Liste jemals enthält. Hier ist das Code-Snippet, mit dem ich das teste.

%Vor%     
Matthew Ruston 13.02.2012, 19:10
quelle

4 Antworten

7

Das scheint sehr merkwürdiges Verhalten zu sein, ich vermute, dass es von DateTime stammt, das kein Typ ist, der in JSON erkannt wird. Sie können jedoch Ihr eigenes IDataContractSurrogate rollen, um den Serialisierungs- / Deserialisierungsprozess zu ändern.

Um dies zu verwenden, modifizieren Sie Ihren Beispielcode, wenn Sie den Serializer dafür erstellen:

%Vor%

Fügen Sie dann diese Klasse hinzu:

%Vor%     
mike z 19.02.2012, 08:08
quelle
30

In der .NET Framework-Version 4.5 hat die DataContractJsonSerializer einen Konstruktor, der ein DataContractJsonSerializerSettings -Objekt akzeptiert, mit dem DateTimeFormat :

gesetzt werden kann %Vor%     
David Clarke 20.03.2014 22:43
quelle
4

Wenn DataContractJsonSerializer kein muss ist, verwenden Sie Json.Net .

%Vor%

Dies ist die Json-Zeichenfolge

%Vor%

und zurückgegebene Typen sind long , string , double , bool und DateTime

    
L.B 13.02.2012 19:31
quelle
3

Sie könnten DateTime.Now vor der Serialisierung und der Konvertierung in eine Zeichenfolge konvertieren wandle es nach der Deserialisierung zurück in DateTime .

Umwandlung in Zeichenfolge durch:

%Vor%

Konvertierung zurück in DateTime nach der Deserialisierung:

%Vor%

Also wäre der ganze Code wie folgt:

%Vor%     
brgerner 16.02.2012 13:38
quelle