首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >允许将日期反序列化为JsonServiceClient中的js Date对象

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

Stack Overflow用户
提问于 2020-09-15 11:30:47
回答 1查看 50关注 0票数 1

肯定与提出的其他问题有关(例如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)",如下所示……

代码语言:javascript
复制
...
    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钩子来影响我想要的代码生成,这是非常好的。

代码语言:javascript
复制
TypeScriptGenerator.PropertyTypeFilter = (gen, type, prop) =>
    (prop.Type == "DateTime" ? "Date" : gen.GetPropertyType(prop, out var isNullable));

作为背景,为一个健壮的React DataGrid (我碰巧使用的是Telerik/Progress "KendoRect“套件)提供适当的日期会变得非常优雅……当存在实际日期时,网格的本机行为可以对这些日期进行过滤和排序,而不是字符串。

迷思,

您是否可以考虑在JsonServiceClient中提供一个“钩子”,这样我们就可以提供一个自定义的反序列化函数,如下所示?或可能的替代方案?

感谢你所做的一切!

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-15 14:12:00

我已经在this commit中的JsonServiceClient上添加了一个parseJson钩子,您可以使用以下命令自定义如何在JsonServiceClient中解析JSON:

代码语言:javascript
复制
const client = new JsonServiceClient(baseUrl);
client.parseJson = res => res.text().then(s => JSON.parse(s,reviver));

此更改可从现在npm上的v1.0.34+获得。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63894650

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档