Существует проблема с обработкой дат. JavaScriptSerializer использует следующий формат при работе с датами: /Date(1302296382818)/
, который, к сожалению, не имеет большого смысла для jQuery при синтаксическом анализе ответа GET JSON, поэтому вы не получаете реальную дату на стороне клиента, кроме строки.Так что вам нужен бесстыдный хак, чтобы преобразовать эту строку в реальную дату:
myData.Start = new Date(parseInt(data.Start.substr(6)));
А вот полная история взлома:
Модель:
public class Product
{
public int Id { get; set; }
public DateTime Start { get; set; }
}
Контроллер:
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
public ActionResult Data()
{
var product = new Product
{
Id = 1,
Start = DateTime.Now,
};
return Json(product, JsonRequestBehavior.AllowGet);
}
[HttpPost]
public ActionResult Data(Product product)
{
return Json(product);
}
}
Просмотр:
<script type="text/javascript">
var myData;
function getData(event) {
$.getJSON('/home/data', function (data) {
myData = data;
myData.Start = new Date(parseInt(data.Start.substr(6)));
});
return false;
}
function changeData(event)
{
var postData = JSON.stringify(myData);
$.ajax({
url: '/home/data',
type: 'POST',
data: postData,
dataType: 'json',
contentType: 'application/json; charset=utf-8',
success: function (result) {
console.log(result);
}
});
return false;
}
$(function () {
$('#get').click(getData);
$('#post').click(changeData);
});
</script>
<button id="get">get</button>
<button id="post">post</button>
Оставление кейса TimeSpan
в качестве упражнения для читателя, поскольку для него потребуется еще один бесстыдный взлом, и я устал от взломов-)