可能重複:
Format a Microsoft JSON date?如何使用JSON.NET通過ASP.NET MVC傳遞JSON日期值?
的ASP.NET功能Json()
格式並返回一個日期
{"d":"\/Date(1240718400000)\/"}
,其具有與在客戶端要處理哪個是有問題的。對於來回發送日期值的方法,您有什麼建議?
可能重複:
Format a Microsoft JSON date?如何使用JSON.NET通過ASP.NET MVC傳遞JSON日期值?
的ASP.NET功能Json()
格式並返回一個日期
{"d":"\/Date(1240718400000)\/"}
,其具有與在客戶端要處理哪個是有問題的。對於來回發送日期值的方法,您有什麼建議?
看看博文jQuery, Ajax, ASP.NET and dates。
它詳細說明如何使用ASP.NET MVC和jQuery在服務器和客戶端之間通過JSON傳遞日期。
並非所有人都同意我這是一個好主意,但我發現自己經常返回格式化的字符串,而不是正確的日期。見How I handle JSON dates returned by ASP.NET AJAX。
如果您不綁定到MS JSON序列化程序,則可以使用Json.NET。它帶有一個IsoDateTimeConverter來處理序列化日期問題。這會將日期序列化爲ISO 8601格式化的字符串。
例如,在我們的項目序列化myObject
通過以下代碼處理。
JsonNetResult jsonNetResult = new JsonNetResult();
jsonNetResult.Formatting = Formatting.Indented;
jsonNetResult.SerializerSettings.Converters.Add(new IsoDateTimeConverter());
jsonNetResult.Data = myObject;
如果你決定採取Json.NET急跌你也想抓住JsonNetResult因爲它返回一個可以在ASP.NET MVC應用程序中使用一個ActionResult。這很容易使用。
欲瞭解更多信息,請參閱:Good (Date)Times with Json.NET
不知道我們怎麼錯過了,謝謝 – Marc 2009-08-12 01:39:14
這可能是醜陋,但它的工作原理:
var epoch = (new RegExp('/Date\\((-?[0-9]+)\\)/')).exec(d);
$("#field").text((new Date(parseInt(epoch[1]))).toDateString());
也許,這是沒有必要的整個字符串匹配,並且只( - [0-? 9] +)就足夠了......
玩過Json.NET庫之後,我在想爲什麼要選擇在JavaScriptDateTimeConverter上使用IsoDateTimeConverter。
我發現這更容易與Ext JS接口一起使用,這些接口是在從MVC控制器序列化日期時使用的。
JsonNetResult jsonNetResult = new JsonNetResult();
jsonNetResult.Formatting = Formatting.Indented;
jsonNetResult.SerializerSettings.Converters.Add(new JavaScriptDateTimeConverter());
jsonNetResult.Data = myObject;
我得到這個數據回的Ext.data.JsonStore的實踐例子,它能夠獲取返回的值作爲一個日期有沒有我指定的日期格式解析。
store:new Ext.data.JsonStore({
url: pathContext + '/Subject.mvc/Notices',
baseParams: { subjectId: this.subjectId },
fields: [
{name: 'Title'},
{name: 'DateCreated', type: 'date' }
]
}),
的JSON返回看起來是這樣的:
[{"Title":"Some title","DateCreated":new Date(1259175818323)}]
沒有任何理由要轉換爲ISO 8601的格式和回來,如果你沒有到。
因爲'JavaScriptDateTimeConverter' [不生成有效的JSON](http://james.newtonking.com/json/help/?topic=html/DatesInJSON.htm)。如果您希望與期望有效JSON的更廣泛客戶保持互操作性,那麼您最好堅持使用ISO 8601。 – 2013-11-18 01:00:57
這在another post發現堆棧 溢出:
var date = new Date(parseInt(jsonDate.substr(6)));
SUBSTR函數取出「/日期(」部分,而parseInt函數函數獲取整數,而忽略了「)/」在結束。生成的數字被傳入Date構造函數。
最簡單的解決方案是最好的 – DalSoft 2012-02-18 13:12:13
自動轉換日期在客戶端上(如果你使用jQuery)
-
你沒有指定,但因爲你是使用ASP.NET MVC你可以使用jQuery。如果你這樣做,如果你使用this blog post提供的代碼,轉換爲實際日期變得更簡單。該代碼擴展了jQuery的$.parseJSON()
功能,因此它會自動將ISO和ASP.NET日期字符串轉換爲實際的JavaScript日期。
我在ASP.NET MVC中使用它,它的作用就像一個魅力。最好的部分是它也是向後兼容的。使用$.parseJSON()
的現有代碼將像以前一樣工作(實際上工作原理相同),但如果您提供第二個參數並將其值設置爲true
,則所有日期都會自動轉換爲您。
該擴展在適用的地方使用本機瀏覽器JSON支持,也適用於其他情況。無論如何,現代瀏覽器都支持這個功能。
這提供了一些見解,但是處理w/jQuery到ASP.NET Web服務,而不是通過Json()返回JsonResult的MVC控制器。我感興趣的是jQuery到ASP.NET MVC w/o MSFT ajax。 – ChrisP 2009-08-12 01:08:41
問題主要在於具有日期屬性而非單個日期值的複雜對象。 – ChrisP 2009-08-12 01:10:46
JSON格式與示例中的描述完全相同。日期屬性或單個日期值沒有區別。 – Alex 2009-08-12 01:13:44