2012-05-10 12 views
5

Wenn ich Objekt zurück, dasASP.NET MVC Controller.Json Datetime Serialisierung vs NewtonSoft Json Serialisierung Datetime

return Json(value); 

auf Client mit Datetime-Eigenschaft enthält I erhalten

"/Date(1336618438854)/" 

Wenn ich den gleichen Wert zurückgeben mit

return Json(JsonConvert.SerializeObject(value)); 

dann der zurückgegebene serialisierte Wert (zusammen mit serialisierten Objekt) i s Zeitzone aware:

"/Date(1336618438854-0400)/" 

Gibt es eine Möglichkeit, konsistentes DateTime-Ergebnis ohne doppelte Serialisierung zu erhalten? Ich habe irgendwo gelesen, dass MS Newtonsoft JSON in MVC einbinden wird?

+0

jemals von Google gehört? erstes Ergebnis ... http://james.newtonking.com/archive/2009/02/20/good-date-times-with-json-net.aspx – MilkyWayJoe

+0

Hmm Google? Das kommt mir bekannt vor. Newtons Serialisierung funktioniert gut. Frage ist, warum MVC Zeitzone ignoriert, wenn sie/Date()/Format übernommen haben. – user1188755

+0

Wenn Sie einfach '$ .parseJSON (result)' verwenden, werden die Daten korrekt analysiert. http://StackOverflow.com/a/4540007/752974 – Pete

Antwort

-2

Wenn Sie nicht in die Parsing Sache graben wollen, einfach konvertieren Sie Ihr Datum in die Zeichenfolge als parse es mit dem JSON.

zum Beispiel

return Json(DateTime.Now.ToString("your date format if you want to specify")); 
+0

Entschuldigung, aber in diesem Beitrag geht es nicht darum, Daten anzuzeigen.Es geht um Konsistenz im serialisierten Datumsformat für komplexe Objekte, die DateTime-Eigenschaften in Server-zu-Client- und Client-zu-Server-Szenarien enthalten. Und was Sie vorschlagen, mache ich in der 2. Zeile mit SerializeObject für das gesamte Objekt. – user1188755

+0

@ user1188755 ... unter http://stackoverflow.com/questions/668488/parsing-json-datetime-from-newtonsofts-json-serializer –

8

ich, was endlich herausgefunden zu tun.
Ich werde mein Projekt in ISO 8601 DateTime-Format wechseln. Die Serialisierung funktioniert gut mit JSON.net, indem Sie einfach die Eigenschaft datetime für das Objekt mit dem JsonConverter-Attribut dekorieren.

public class ComplexObject 
    { 
     [JsonProperty] 
     public string ModifiedBy { get; set; } 
     [JsonProperty] 
     [JsonConverter(typeof(IsoDateTimeConverter))] 
     public DateTime Modified { get; set; } 
     ... 
    } 

Um serialisierten Objekts an den Client Ajax-Aufruf zurückkehren ich tun kann:

return Json(JsonConvert.SerializeObject(complexObjectInstance)); 

und auf dem Client:

jsObject = JSON.parse(result) 

Jetzt würde ich denke es wahrscheinlich einfach außer Kraft zu setzen Standard ASP.NET MVC Standard JSON Serializer zu uns Newtonsoft JSON.net ISO 8601 Serialisierung, und ja Prinzip sollte ähnlich zu diesem Thread sein: Change Default JSON Serializer Used In ASP MVC3.

+0

Große Antwort, aber ich fand, dass die Newtonsoft.Json Attribute nicht notwendig sind. Wenn Sie einfach '$ .parseJSON (result)' verwenden, werden die Daten korrekt analysiert. http://StackOverflow.com/a/4540007/752974 – Pete

-2

Es gibt das Server-Datumsformat zurück. Sie müssen Ihre eigene Funktion definieren.

function jsonDateFormat(jsonDate) { 

// Changed data format; 
return (new Date(parseInt(jsonDate.substr(6)))).format("mm-dd-yyyy/h:MM tt"); 

};

+1

Was ist '.format'? –

0

Im WebApiConfig Satz:

config.Formatters.Remove(config.Formatters.XmlFormatter); 
     //config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html")); 
     config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("application/json")); 
     config.Formatters.JsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver(); 
     config.Formatters.JsonFormatter.SerializerSettings.Formatting = Newtonsoft.Json.Formatting.Indented; 
     config.Formatters.JsonFormatter.SerializerSettings.DateFormatHandling = Newtonsoft.Json.DateFormatHandling.IsoDateFormat; 

     config.MapHttpAttributeRoutes(); 

Im ApiController zurückkommen:

return Request.CreateResponse(HttpStatusCode.OK, obj); 

Good Luck CAhumada

Verwandte Themen