<%@ Page Language="C#" %>
<!DOCTYPE>
<script runat="server">
void Page_Load(object sender, EventArgs e)
{
string mode = Request["mode"];
if (!string.IsNullOrEmpty(mode))
{
var jss =
new System.Web.Script.Serialization.JavaScriptSerializer();
if (mode == "get")
{
List<DateTime> list = new List<DateTime>();
list.Add(new DateTime(2012, 2, 29));
Response.Write(jss.Serialize(list));
}
else if (mode == "post")
{
try
{
List<DateTime> list =
jss.Deserialize<List<DateTime>>(Request["json"]);
Response.Write("List[0]=" + list.First());
}
catch (Exception ex)
{
Response.Write("Error: " + ex.Message);
}
}
Response.End();
}
}
</script>
<html>
<head runat="server">
<title>JSON Date Lab</title>
<script type='text/javascript'
src='http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.7.1.js'></script>
<script>
$(function () {
$("#btnTest").click(function () {
//取得List<DateTime> JSON
$.get("?mode=get", {}, function (json) {
alert("JSON=" + json);
//將取得的JSON字串傳回去,可解析,但會有時區誤差
$.post("?mode=post", { json: json }, function (r) {
alert("TEST1:" + r);
});
//將JSON字串先解析為物件
var list = JSON.parse(json);
//因JSON.parse()不認得\/Date(...)\/格式,只會被當成字串處理
//而"\/"相當於"\",故最終被解析成字串"/Date(...)/",
var rejson = JSON.stringify(list);
alert("Object->" + rejson);
//將這個字串陣列JSON.stringify()再傳回去,則會因"\/"變成"/"而出現錯誤
$.post("?mode=post", { json: rejson }, function (r) {
alert("TEST2:" + r);
});
});
});
});
</script>
<style>
body,input { font-size: 9pt; }
</style>
</head>
<body>
<form id="form1" runat="server">
<input type="button" id="btnTest" value="Test" />
</form>
</body>
</html>