允许在JsonServiceClient中将日期反序列化为js-Date对象



肯定与其他问题有关(例如,在d.ts中对servicestack typescript客户端的日期支持(,但我想我问的更多=(

首先,我发现json没有传递真正的JS日期,这是ServiceStack在TypeScript中编码要字符串的C#DTO DateTime的原因。。。

然而,在其他fetch客户端包装器中,类似于SS JsonServiceClient,我有很好的经验使用JSON.parse(JSON,reviver(的第二个arg来查找日期模式并反序列化为正确的JS date。。。

切入正题,作为概念的证明,我已经接种了"猴痘疫苗";JsonServiceClient.prototype.createResponse=函数(res,请求(";,像这样…

...
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
);
});
}
...

fyi对于其他人来说,已经有TypeScriptGenerator挂钩来影响我想要的代码生成是非常好的,例如

TypeScriptGenerator.PropertyTypeFilter = (gen, type, prop) =>
(prop.Type == "DateTime" ? "Date" : gen.GetPropertyType(prop, out var isNullable));

作为背景,为强大的React DataGrid提供适当的日期变得非常优雅(我碰巧使用Telerik/Progress"KendoRect"套件(。。。当存在真实日期时,网格的本地行为可以根据这些日期进行筛选和排序,而不是使用字符串。

mythz,

你能考虑提供一个";钩子";到JsonServiceClient中,以便我们可以提供这样的自定义反序列化函数?或者可能的替代方案?

谢谢你所做的一切!

仅供参考,我使用的是最新的v5.9.3堆栈的所有

在本次提交中,我在JsonServiceClient上添加了一个parseJson挂钩,您可以在其中自定义JSON在JsonServiceClient中的解析方式:

const client = new JsonServiceClient(baseUrl);
client.parseJson = res => res.text().then(s => JSON.parse(s,reviver));

此更改从v1.0.34+开始提供,现在已在npm上发布。

最新更新