servicestack - 允许将日期反序列化为 JsonServiceClient 中的 js Date 对象
问题描述
肯定与其他问题有关(例如d.ts 中对 servicestack typescript 客户端的日期支持),但我想我问的更多=)
首先,我确实认为 json 没有传递真正的 JS Date 作为 ServiceStack 将 C# DTO DateTime 代码生成为 TypeScript 中的字符串的原因...
然而在其他 fetch 客户端包装器中,类似于 SS JsonServiceClient,我在使用JSON.parse(json, reviver)的第二个 arg来查找日期模式并反序列化为正确的 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 堆栈
解决方案
我在这个提交parseJson
中添加了一个钩子,您可以在其中自定义 JSON 的解析方式:JsonServiceClient
JsonServiceClient
const client = new JsonServiceClient(baseUrl);
client.parseJson = res => res.text().then(s => JSON.parse(s,reviver));
从现在 npm 上的 v1.0.34+ 可以使用此更改。
推荐阅读
- ajax - 为什么我的 Ajax 发布的数据格式不正确?
- asp.net - 图像不会在 asp.net mvc 5 中加载
- php - Bash中的PHP命令不执行代码
- mysql - 将两个字段表合并为一个列列表
- elasticsearch - Elasticsearch NEST 重用 ElasticClient 进行不同的索引查询
- java - 优点 vs 缺点 - HibernateUtil vs @Autowired SessionFactory
- json - jq 过滤器将 jsonlines 转换为单个 json 映射
- python - 在 Python 中删除 Boxplot 中的标签
- php - Yii2 - 无法添加外键约束
- python - 将字典中的值与多个匹配键进行比较