如何解决允许在JsonServiceClient中将日期反序列化为js Date对象
肯定与所问的其他问题(例如Date support in d.ts for servicestack typescript client)有关,但我想我要问更多=)
首先,我确实认为json没有传递真实的JS日期,这是ServiceStack代码生成C#DTO DateTime到TypeScript中字符串的原因...
但是在其他获取客户端包装程序中,类似于SS JsonServiceClient,我在使用JSON.parse(json,reviver)的第二个参数来查找日期模式并将其反序列化为正确的JS日期方面有很好的经验...
为了追赶,作为概念的证明,我已经猴子补丁了“ JsonServiceClient.prototype.createResponse = function(res,request)”,就像这样……
...
if (isJson) {
// return res.json().then(function (o) {
// return o;
// });
return res.text().then(function (o) {
return JSON.parse(o,(_key,value) => (typeof value === 'string' && value.startsWith('/Date')) ? new Date(parseFloat(value.slice(6,-2))) : value
);
});
}
...
对于其他人来说很方便,很高兴已经有了TypeScriptGenerator钩子来影响我想要的代码源,例如
TypeScriptGenerator.PropertyTypeFilter = (gen,type,prop) =>
(prop.Type == "DateTime" ? "Date" : gen.GetPropertyType(prop,out var isNullable));
对于背景,为健壮的React DataGrid提供正确的日期(我碰巧使用Telerik / Progress的“ KendoRect”套件)变得非常优雅……当出现实际日期时,网格的本机行为可以进行过滤和排序这些日期与使用字符串的日期不太一样。
神话,
您是否可以考虑在JsonServiceClient中提供一个“钩子”,以便我们可以提供像这样的自定义反序列化功能?或可能的替代方案?
感谢您所做的一切!
仅供参考,我正在使用最新的v5.9.3堆栈
解决方法
我在pyformat.info的parseJson
上添加了JsonServiceClient
钩子,您可以在其中自定义JSON在JsonServiceClient
中的解析方式:
const client = new JsonServiceClient(baseUrl);
client.parseJson = res => res.text().then(s => JSON.parse(s,reviver));
此更改从npm的v1.0.34 +版本开始可用。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。