2012-05-10 47 views
5

當我返回一個包含使用ASP.NET MVC Controller.Json日期時間序列化VS NewtonSoft Json的日期時間序列化

return Json(value); 
客戶端

的DateTime屬性對象我收到

"/Date(1336618438854)/" 

如果我返回相同的值使用

return Json(JsonConvert.SerializeObject(value)); 

然後返回的序列化的值(連同序列化對象)我s時區知道:

"/Date(1336618438854-0400)/" 

有沒有什麼辦法可以獲得一致的DateTime結果,沒有雙重序列化?我讀過MS將包含Newtonsoft JSON到MVC的地方?

+0

聽說過谷歌的?第一個結果... http://james.newtonking.com/archive/2009/02/20/good-date-times-with-json-net.aspx – MilkyWayJoe

+0

嗯Google?這聽起來很熟悉。牛頓的序列化工作正常。問題是爲什麼MVC在採用/ Date()/格式時忽略時區。 – user1188755

+0

只需使用'$ .parseJSON(result)'就可以正確解析日期。 http://stackoverflow.com/a/4540007/752974 – Pete

回答

-2

如果您不想深入分析的東西,而不是簡單地將日期轉換爲字符串,而不是使用JSON解析它。

例如

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

對不起,但這篇文章不是顯示日期。它關於包含服務器到客戶端和客戶端到服務器場景的包含DateTime屬性的複雜對象的序列化日期格式的一致性。並且你在爲整個對象使用SerializeObject的第二行提示我正在做什麼。 – user1188755

+0

@ user1188755 ...檢查下面這個http://stackoverflow.com/questions/668488/parsing-json-datetime-from-newtonsofts-json-serializer –

8

我終於想通了,做什麼。
我會將我的項目切換爲ISO 8601 DateTime格式。使用Json.net很好地完成序列化,只需使用JsonConverter屬性修飾對象的datetime屬性即可。

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

要返回序列化對象到客戶端AJAX調用我可以這樣做:

return Json(JsonConvert.SerializeObject(complexObjectInstance)); 

,並在客戶端上:

jsObject = JSON.parse(result) 

現在,我想這將是可能簡單重寫默認的ASP.NET MVC默認JSON序列化程序給我們Newtonsoft JSON.net ISO 8601序列化,並且原理應該與此線程類似:Change Default JSON Serializer Used In ASP MVC3

+0

很好的答案,但我發現,Newtonsoft.Json屬性是沒有必要的。只需使用'$ .parseJSON(result)'就可以正確解析日期。 http://stackoverflow.com/a/4540007/752974 – Pete

-2

它返回服務器日期格式。你需要定義你自己的功能。

function jsonDateFormat(jsonDate) { 

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

};

+1

什麼是'.format'? –

0

WebApiConfig集:

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(); 

在ApiController返回此:

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

好運 CAhumada

相關問題