默认情况下,由webstorm插件生成的servicestack打字稿文件dtos.ts将所有日期属性设置为字符串。
// @Required()
to: string;
在服务堆栈.cs文件中,此属性为日期时间。 任何想法为什么会这样以及我需要做什么,例如,它会将其转换为 Date 作为 Web API asp.net
与其他语言不同,TypeScript 中没有"反序列化步骤",即 TypeScript DTO 只定义了在原始 JSON 中返回的类型,由于 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);
或者,如果使用ss-utils.js则内置于ServiceStack中:
var date = $.ss.todate(wcfDateString);
如果将日期的 ServiceStack.Text 默认序列化更改为使用ISO8601日期格式:
JsConfig.DateHandler = DateHandler.ISO8601;
它可以通过以下方式进行本机解析:
new Date(dateString)
同样,当配置为返回时:
JsConfig.DateHandler = DateHandler.UnixTimeMs;
它也可以通过以下方式进行本机转换:
new Date(unixTimeMs)