【问题标题】:Convert an array of c# Model Date property to JSON Date value将 c# 模型日期属性数组转换为 JSON 日期值
【发布时间】:2012-05-29 08:15:38
【问题描述】:

我有一个 C# 模型,我返回到我的视图中,然后将其转换为 JSON 对象数组,如下所示:

@{
    string data = new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(Model);
}
var modelData = @Html.Raw(data);

我的模型如下所示:

public int Id { get; set; }
public DateTime Date { get; set; }
public decimal Value { get; set; }

当我输出 Date 时,它会输出为:Date: /Date(1338279123847)/

无论如何我可以将日期转换为 Javascript 日期,然后再将其输出到我的视图中,也许是在我的 modelData 数组中?形式为DD/MM/YYYY

【问题讨论】:

  • 该日期是直接从您的代码输出中复制的吗?我不确定它的格式。我最初认为它是一个纪元时间戳,但除非日期最初是 44,378 年 5 月的某个时间,否则我认为不是。
  • 我的 C# 模型中的 Date 属性就是今天的日期:DateTime.Now

标签: c# javascript jquery asp.net-mvc-3


【解决方案1】:

序列化模型时不能这样做,但之后可以这样做:

<script type="text/javascript">
    var modelData = {"Date":"\/Date(1338279675925)\/"};
    var jsDate = new Date(parseInt(modelData.Date.replace("/Date(", "").replace(")/",""), 10));
    alert(jsDate.toISOString());
</script>

另一种可能性是使用Json.NET,它允许您使用serialize dates using ISO 8601 format 而不是内置的JavaScriptSerializer

【讨论】:

  • 但是modelData还包含其他属性,是否可以使用JQuery.each方法?
  • 我不明白您的 modelData 包含其他属性的事实与日期序列化有什么关系。
  • 谢谢,我用你的答案解决了,还用了JQuery.each()函数:var modelData = @Html.Raw(data); 然后:modelData = $.each(modelData, function(i, v) { var dateString = new Date(parseInt(v.Date.replace("/Date(", "").replace(")/",""), 10)); v.Date = dateString.getDate() + "/" + (dateString.getMonth() + 1) + "/" + dateString.getFullYear(); });
  • 你真的应该考虑切换到 JSON.NET。它比 JavaScriptSerializer 更快,更强大。 Scott Hanselman 批准了这条消息! ;) hanselman.com/blog/…
  • 完全同意卢卡斯克。无论如何,Json.NET 在未来的 ASP.NET MVC 版本中都将成为默认的序列化程序,那么为什么不现在就开始使用它呢?这样,您在迁移应用程序时就少了一件需要担心的事情。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-10
  • 1970-01-01
  • 2012-08-12
  • 2017-10-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多