it-swarm.com.de

Wie übergebe ich mit JSON.NET einen JSON-Datumswert über ASP.NET MVC?

Mögliches Duplizieren:
Ein Microsoft JSON-Datum formatieren?

Die ASP.NET-Funktion Json() formatiert und gibt ein Datum als zurück

{"d":"\/Date(1240718400000)\/"}

was auf der Client-Seite behandelt werden muss, was problematisch ist. Was sind Ihre Vorschläge für Ansätze zum Hin- und Herschicken von Datumswerten?

36
ChrisP

Dies wurde in ein weiterer Beitrag über Stack Overflow gefunden:

var date = new Date(parseInt(jsonDate.substr(6))); 

Die substr-Funktion nimmt den "/ Date" -Teil heraus, und die parseInt-Funktion ruft die Ganzzahl ab und ignoriert das ") /" am Ende. Die resultierende Nummer wird an den Date-Konstruktor übergeben.

29
Jimbo

Wenn Sie nicht an den MS JSON-Serialisierer gebunden sind, können Sie Json.NET verwenden. Es wird mit einem IsoDateTimeConverter geliefert, um Probleme mit der Serialisierung von Datumsangaben zu behandeln. Dadurch werden Datumsangaben in eine ISO 8601 formatierte Zeichenfolge serialisiert. 

In unserem Projekt wird zum Beispiel myObject mit dem folgenden Code behandelt.

JsonNetResult jsonNetResult = new JsonNetResult();
jsonNetResult.Formatting = Formatting.Indented;
jsonNetResult.SerializerSettings.Converters.Add(new IsoDateTimeConverter());
jsonNetResult.Data = myObject;

Wenn Sie sich für den Json.NET-Sprung entscheiden, sollten Sie auch JsonNetResult verwenden, da ein ActionResult zurückgegeben wird, das in der ASP.NET-MVC-Anwendung verwendet werden kann. Es ist ziemlich einfach zu benutzen.

Weitere Informationen finden Sie unter: Gute (Datums-) Zeiten mit Json.NET

11
Ryan Taylor

Es kann hässlich sein, aber es funktioniert:

 var Epoch = (new RegExp('/Date\\((-?[0-9]+)\\)/')).exec(d);
 $("#field").text((new Date(parseInt(Epoch[1]))).toDateString());

Möglicherweise ist es nicht notwendig, die gesamte Zeichenfolge zuzuordnen, und (-? [0-9] +) reicht aus ...

6
Felix

Nicht jeder stimmt mir zu, dass dies eine gute Idee ist, aber ich finde, dass ich am häufigsten formatierte Zeichenfolgen anstelle von Datumsangaben zurücksende. SieheWie gehe ich mit JSON-Daten um, die von ASP.NET AJAXzurückgegeben werden. 

5
Dave Ward

Datumsangaben auf Clientseite automatisch konvertieren (wenn Sie jQuery verwenden)

-

Sie haben es nicht angegeben, aber da Sie ASP.NET MVC verwenden, könnten Sie jQuery verwenden. Wenn Sie dies tun, wurde die Konvertierung in tatsächliche Daten einfacher, wenn Sie den in diesem Blogbeitrag bereitgestellten Code verwenden. Der Code erweitert die $.parseJSON()-Funktionalität von jQuery, sodass ISO- und ASP.NET-Datumszeichenfolgen automatisch in tatsächliche JavaScript-Datumsangaben konvertiert werden.

Ich verwende es mit ASP.NET MVC und es funktioniert wie ein Zauber. Das Beste ist, dass es auch abwärtskompatibel ist. Bestehender Code, der $.parseJSON() verwendet, funktioniert genauso wie zuvor (und funktioniert auch tatsächlich). Wenn Sie jedoch den zweiten Parameter angeben und seinen Wert auf true setzen, werden alle Datumsangaben automatisch für Sie konvertiert.

Die Erweiterung verwendet ggf. die native JSON-Unterstützung des Browsers und funktioniert auch bei anderen, die dies nicht tun. Moderne Browser unterstützen diese Funktion trotzdem.

1
Robert Koritnik

Nach dem Spielen mit der Json.NET-Bibliothek frage ich mich, warum Sie den IsoDateTimeConverter über den JavascriptDateTimeConverter verwenden möchten.

Ich fand es einfacher, mit den Ext JS - Schnittstellen zu verwenden, die ich beim Serialisieren von Datumsangaben von einem MVC-Controller verwendete. 

JsonNetResult jsonNetResult = new JsonNetResult();
jsonNetResult.Formatting = Formatting.Indented;
jsonNetResult.SerializerSettings.Converters.Add(new JavaScriptDateTimeConverter());
jsonNetResult.Data = myObject; 

Ich bekomme diese Daten zurück in einen Ext.data.JsonStore, der den zurückgegebenen Wert als Datum abrufen kann, ohne dass ich ein Datumsformat zum Analysieren angeben muss.

        store:new Ext.data.JsonStore({
            url: pathContext + '/Subject.mvc/Notices',
            baseParams: { subjectId: this.subjectId },
            fields: [
               {name: 'Title'},
               {name: 'DateCreated', type: 'date' }
            ]
        }),

Das zurückgegebene JSON sieht folgendermaßen aus:

[{"Title":"Some title","DateCreated":new Date(1259175818323)}]

Es gibt keinen Grund, in das ISO 8601-Format und zurück zu konvertieren, wenn Sie nicht müssen.

1
brow-cow

Schauen Sie sich den BlogbeitragjQuery, Ajax, ASP.NET und Datumsangaben an.

Es beschreibt, wie Sie mit ASP.NET MVC und jQuery zusammenarbeiten, um Datumsangaben über JSON zwischen Server- und Clientseite zu übergeben.

0
Alex