【问题标题】:How to serialize a C# DateTime as a Javascript Date using Web API如何使用 Web API 将 C# DateTime 序列化为 Javascript 日期
【发布时间】:2017-11-11 08:53:56
【问题描述】:

在 MVC 中,你可以这样做:

public ActionResult Index()
{
    return Json(new List<DateTime> { DateTime.Parse("19/02/2017") }, 
                JsonRequestBehavior.AllowGet);
}

而返回值为["\/Date(1487458800000)\/"],是一个Javascript Date对象。

但是,像这样使用 WebAPI:

public IEnumerable<DateTime> Get()
{
    return new List<DateTime> { DateTime.Parse("19/02/2017") };
}

返回值为&lt;dateTime&gt;2017-02-19T00:00:00&lt;/dateTime&gt;

有什么方法可以使用 WebApi 将 DateTime 序列化为 Javascript Date 对象?

【问题讨论】:

  • 嗨...你只需要输出为 1487458800000.. 我找到了一种使用日期减法来根据自 1970 年以来经过的毫秒数计算 Java 日期的方法
  • 我需要这个对象,因为我想使用 Angular 将它绑定到一个输入 datetime-local。并且根据文档:“模型必须始终是 Date 对象”
  • Martin - 传入的日期对象能否在脚本中创建? var date = new Date(1487458800000);
  • 日期在另一个对象中,该对象在数千个列表中。我宁愿不转换每个日期。我知道有一些方法可以将它从字符串或刻度转换,但我正在寻找一种在序列化过程中完成这个简单任务的方法。 MVC 有,为什么 Web API 没有?
  • 也许您需要实现一个自定义媒体类型格式化程序:stackoverflow.com/questions/14145097/…

标签: javascript c# .net json asp.net-web-api


【解决方案1】:

如果您将请求中的 Accept 标头更改为 application/json,您将获得:

["2017-06-09T08:14:13.7729697-03:00"]

尝试使用Postman 之类的工具。

在 Angular 中,您可以执行以下操作:

var config = { headers:  {
        'Accept': 'application/json',
    }
};

$http.get("/api/values", config);

【讨论】:

  • 请您再解释一下如何更改该标题。我正在使用 Angular 的 $http.get 来执行请求。
  • 使用浏览器有点困难。 IE 默认为 JSON,但它会下载文件。 FF 和 Chrome 默认为 XML。获取 Postman,然后在 Headers 选项卡上添加键 Accept 和值 application/json。将其更改为application/xml 并查看输出如何变化。
  • 没关系,这是一个愚蠢的问题。在 Angular 中,您可以使用 headers: { 'Accept': 'application/json' }
  • angular 示例更新了答案。
  • 它不起作用。现在在邮递员我得到这个:[ "2017-02-19T00:00:00" ]。我需要 Date 对象。
【解决方案2】:

您可以在 JavaScript 中使用该格式:

var myDate = new Date("2017-02-19T00:00:00");

【讨论】:

  • 我知道。这不是我的问题的答案。我不想从字符串中解析日期,我想直接从 DateTime 转换。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-07-30
  • 2021-10-10
  • 1970-01-01
  • 2018-02-20
  • 2018-11-23
  • 1970-01-01
相关资源
最近更新 更多