肯定与提出的其他问题有关(例如Date support in d.ts for servicestack typescript client),但我想我会问更多=)
首先,我确实发现json没有通过真正的JS日期作为ServiceStack代码将C# DTO DateTime转换为TypeScript中的字符串的原因……
然而,在其他类似于SS JsonServiceClient的fetch客户端包装器中,我使用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堆栈
发布于 2020-09-15 14:12:00
我已经在this commit中的JsonServiceClient上添加了一个parseJson钩子,您可以使用以下命令自定义如何在JsonServiceClient中解析JSON:
const client = new JsonServiceClient(baseUrl);
client.parseJson = res => res.text().then(s => JSON.parse(s,reviver));此更改可从现在npm上的v1.0.34+获得。
https://stackoverflow.com/questions/63894650
复制相似问题