Wir möchten JSON einem Benutzer zeigen, der unsere Anwendung testet. Daher nennen wir unseren REST-Service im ASP.NET-Code hinter der Datei und geben eine Zeichenfolge zurück, die eine Menge JSON enthält.
Wir fügen es dann in ein PRE-Element auf der Seite ein, rufen beautify auf, um gut lesbare JSON zu erstellen, und alles ist gut: eine Art von lesbarem Inhalt wird angezeigt.
Gut, aber für eine Sache: Alle Daten werden im normalen JSON-Format wie folgt angezeigt: "/ Date (1319266795390 + 0800) /"
Was ich tun möchte, ist, diese JSON-Daten durch 'normale' Daten in der JSON (C #) - Zeichenkette zu ersetzen, also im nachfolgenden Code, bevor ich die Zeichenkette zum PRE-Element hinzufüge.
Ich habe über eine Regex nachgedacht, aber ich konnte nicht herausfinden, wie ...
Die Lösung befindet sich innerhalb der in der Frage angegebenen Zeichenfolge. Das JavaScript Date-Objekt analysiert dieses Format und erstellt eine lesbare Version, sodass Date(1319266795390+0800)
"Wed Apr 18 2012 08:13:22 GMT-0500 (Central Daylight Time)" zurückgibt.
Um den Schrägstrich aus der Zeichenfolge zu entfernen, können Sie die Funktion replace mit einem regulären Ausdruck verwenden: "/Date(1319266795390+0800)/".replace(/\//g, '')
.
Ich habe mich schon seit einiger Zeit mit Daten in JSON-String beschäftigt, es gibt keinen Standardweg dafür und deshalb gibt es so viele verschiedene Möglichkeiten, es zu tun! Vielleicht wäre es besser, wenn die JSON-Spezifikation überhaupt ein Standardformat für Daten angeben könnte!
Microsoft macht es auf seine eigene Art und Weise, zählt die MSC seit 1970 im UTC-Format, das ist so etwas wie "/Date(1319266795390+0800)/"
Wir haben die obige Zeichenfolge seit der Verwendung von regulären Ausdrücken auf das ISO-8601-Format geändert ASP.Net JavaScriptSerializer
Ausgabe. Es ist ein W3C-Standard, menschenlesbar und die Art und Weise, wie die meisten Browser Date to string serialisieren, folgt:
Sie können das Format ganz einfach ändern, um Ihre Anforderungen zu erfüllen und benutzerdefinierte Formate für Datum und Uhrzeit MSDN-Dateien anzeigen zu lassen Artikel hier
So wird es verwendet:
%Vor%Aktualisierung:
Es gibt eine Alternative, um die JSON-Zeichenfolge, die vom Server in JavaScript zurückgegeben wird, mit Regex:
in ein besser lesbares Format zu ändern %Vor%Angenommen, die Klasse, die Sie serialisieren möchten, sieht so aus:
%Vor%ändere es zu:
%Vor%oder, wenn diese zusätzliche Eigenschaft nur in der Testumgebung angezeigt werden soll:
%Vor% auch, anstelle von .ToLongDateString()
können Sie .ToString("yyyy-MM-dd HH:mm")
oder ein beliebiges anderes Format verwenden
Verwenden Sie als Regex etwas wie:
%Vor% Dies stimmt mit dem Teil in den Klammern von /Date(1319266795390+0800)/
überein. Sie können dann Regex.Replace
für die gesamte JSON-Zeichenfolge aufrufen, um die Zahlen durch ein schön formatiertes DateTime
zu ersetzen:
Verwenden Sie das Match
-Objekt, das Sie im Match-Evaluator-Delegaten erhalten, und extrahieren Sie den Ticks-, zonesign-, zonehour- und zoneminutes-Teil, konvertieren Sie ihn in Ganzzahlen.
Dann wandle die JavaScript-Ticks in .NET-Ticks (sollte * 10000 sein), konstruiere die .NET DateTime
aus Ticks und addiere / subtrahiere die Stunden und Minuten für die Zeitzone.
Konvertiere das DateTime
in eine Zeichenkette und gib es als Ersatz zurück.
Wenn Ihr JSON eine serialisierte Darstellung einer .NET-Klasse ist, könnten Sie vielleicht die DataContractJsonSerializer
verwenden, um sie auf dem Server zu deserialisieren, oder vielleicht könnten Sie einfach eine Stub-Klasse für Ihr JSON-Objekt definieren, wenn Sie sie nicht benötigen eine generische Lösung für die Behandlung mehrerer Datensätze:
Verwenden Sie Newtonsoft.JSON. Sie können Ihre eigenen Serialisierer für jeden Typ bereitstellen und die gewünschten Daten serialisieren.
Mache eine String-Eigenschaft für Beispiel dateofbirth Ich definiere hier und gebe deine Datetime-Variable als
zurück %Vor%, da dies eine Zeichenfolge zurückgibt, so dass sie auf der Clientseite gleich ist, und so auch die Zeichenfolge dateTime vom Benutzer übernimmt und sie konvertiert.