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%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% In der .NET Framework-Version 4.5 hat die DataContractJsonSerializer
einen Konstruktor, der ein DataContractJsonSerializerSettings
-Objekt akzeptiert, mit dem DateTimeFormat
:
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%Tags und Links c# json datacontractjsonserializer