2010-12-03 8 views
1

ich eine Erweiterungsmethode erstellt, die die integrierten ASP.NET-Serializer verwendet meine Objekte in JSON serialisiert zu meinem Server über AJAX zurück zu senden, wie so:Weird-Datumsformat Hilfe

namespace ExtensionMethods.Json 
{ 
public static class JsonHelper 
{ 
    public static string ToJson(this object obj) 
    { 
     JavaScriptSerializer serializer = new JavaScriptSerializer(); 
     return serializer.Serialize(obj); 
    } 

    public static string ToJson(this object obj, int recursionDepth) 
    { 
     JavaScriptSerializer serializer = new JavaScriptSerializer(); 
     serializer.RecursionLimit = recursionDepth; 
     return serializer.Serialize(obj); 
    } 
} 
} 

//usage 
String json = myObject.ToJson(); 

Dies funktioniert gut, außer für Daten, wie es sendet Daten in diesem Format zurück:

/Date(1291276800000)/ 

gibt es eine Möglichkeit, diese serverseitig zu fixieren, so dass das Datum in etwas kommt mehr überschaubar, oder wird einige dummen Zeichen Parsen auf dem Client zu tun hat Seite (z. B. die Ziffern aus den Parens herauskratzen und versuchen, ein Datum unter Verwendung dieses nu zu setzen mber als Millisekunden)? Oder gibt es einen besseren Weg, den ich einfach übersehe? Ich habe versucht, Date.parse([the date]), aber es mit "ungültiges Datumsformat" aus.

+1

Das scheint wie ein gültiges JSON-Datum für mich ... Ich bin verwirrt, warum ist das ein Problem? –

+0

@ liho1eye - ich wusste nicht, das war ein Standardformat, aber habe einen Weg gefunden, es zu beheben :) – Jason

+0

wirklich? Du hast einen Weg gefunden, es zu reparieren, nachdem du alle um Hilfe gebeten hast, und jetzt wirst du nicht mehr posten, wie du es repariert hast, um anderen Leuten mit dem gleichen Problem zu helfen? –

Antwort

3

, dass ein gültiges Json Datum ist. Sehen Sie sich diese andere SO-Frage an, damit Sie das Datum zurückbekommen. How do I format a Microsoft JSON date?

+0

das führte mich schließlich zu dem, was ich suchte. Danke! – Jason

+1

FYI, die höchste Wahl in dieser verbundenen Frage ist der beste Weg, nicht die akzeptierte Antwort – Jason

0

Ich hatte dieses Problem auch und entschied mich, alle meine Datumsobjekte einfach auf Unix-Zeitstempel zu verschieben und sie wieder zu analysieren. Es ist zusätzliche Arbeit, aber es hält die witzige Formatierung aus. Wenn Sie eine Klassenvariable des long Datentyps haben, sollte sie einen Zeitstempel ziemlich schön halten.

Es gibt einige ziemlich solide Proben hier.

http://www.epochconverter.com/

1

Ich verwendete JavaScript Date Format Datumsformat-Erweiterung des Datums-Typs. Es hat mit den JSON-formatierten Daten gut funktioniert.

I gehören die JS-Datei und meine Daten wie folgt formatiert erhalten:

function formatJsonDate(jsonDate, formatString) { 
    var dt = new Date(+jsonDate.replace(/\/Date\((\d+)\)\//, '$1')); 
    return dt.format(formatString); 
} 

var formattedDate = formatJsonDate(jsonDate, "mm/dd/yyyy"); 

Es gibt sogar einige vordefinierte Datumsformat Masken wie:

// Some common format strings 
dateFormat.masks = { 
    "default":  "ddd mmm dd yyyy HH:MM:ss", 
    shortDate:  "m/d/yy", 
    mediumDate:  "mmm d, yyyy", 
    longDate:  "mmmm d, yyyy", 
    fullDate:  "dddd, mmmm d, yyyy", 
    shortTime:  "h:MM TT", 
    mediumTime:  "h:MM:ss TT", 
    longTime:  "h:MM:ss TT Z", 
    isoDate:  "yyyy-mm-dd", 
    isoTime:  "HH:MM:ss", 
    isoDateTime: "yyyy-mm-dd'T'HH:MM:ss", 
    isoUtcDateTime: "UTC:yyyy-mm-dd'T'HH:MM:ss'Z'" 
}; 
+0

gewählt, weil es nützlich ist, aber ich versuchte, die Verwendung externer Bibliotheken zu vermeiden. – Jason

0

Für die Antwort auf diese Frage, diese ist im Grunde, was ich verwendet habe: