默认情况下,webstorm插件生成的servicestack typescript文件dtos.ts将所有日期属性设为字符串。
// @Required()
to: string;
在servicestack .cs文件中,此属性为DateTime。 任何想法为什么它是这样,我需要做什么,它将它转换为日期as asp.net web api例如
答案 0 :(得分:6)
与其他语言不同,没有"反序列化步骤"在TypeScript中,即TypeScript DTO只定义raw JSON中返回的Type,因为JSON中没有Date
类型,Date值以字符串形式返回它是使用JavaScript内置的JSON.parse()
或eval()
转换为JS对象时的类型。
ServiceStack.Text中返回的默认WCF日期可以转换为:
function todate (s) {
return new Date(parseFloat(/Date\(([^)]+)\)/.exec(s)[1]));
};
如果您使用servicestack-client npm包,可以通过以下方式解决:
import { todate } from "servicestack-client";
var date = todate(wcfDateString);
或者如果使用内置于ServiceStack的ss-utils.js:
var date = $.ss.todate(wcfDateString);
如果您将ServiceStack.Text的默认序列化更改为使用ISO8601日期格式:
JsConfig.DateHandler = DateHandler.ISO8601;
可以使用以下内容进行本地解析:
new Date(dateString)
同样配置为返回时:
JsConfig.DateHandler = DateHandler.UnixTimeMs;
它也可以通过以下方式进行本地转换:
new Date(unixTimeMs)