ServiceStack JsonServiceClient 请求不一致

ServiceStack JsonServiceClient Requests not consistent

我创建了一个 ServiceStack.JsonServiceClient 来使用第三方 API。

我正在使用 Get(IReturn<MyType>) 方法。

我的请求对象如下所示:

public class MyRequest : Base, IReturn<MyType>
{
    public MyRequest(DateTime dateTime)
    {
        Date = dateTime.Date;
    }

    [DataMember(Name = "date")]
    public DateTime Date { get; init; }
}

通常一切都很好,但有时无法获得结果。

我设置了 ServiceStack.JsonServiceClient.CaptureHttp() 并查看了日志,我发现当 Date 被转换为 long 而不是这种格式的 string 时它失败了yyyy-MM-dd.

我想这可能是我的错。我可能在我的解决方案中的某处设置了一个静态设置来切换此行为,但我不记得也没有找到它。

我的问题真的只是为什么会这样。

我已经有了一个解决方案,就是将MyRequest稍微修改如下:

public class MyRequest : Base, IReturn<MyType>
{
    public MyRequest(DateTime dateTime)
    {
        Date = $"{dateTime.Date:yyyy-MM-dd}";
    }

    [DataMember(Name = "date")]
    public string Date { get; init; }
}

但同样,为什么需要这样做以及可能导致它工作一段时间然后改变行为的原因。

根据日期序列化,ServiceStack 的序列化程序 return 日期采用 WCF 的日期序列化格式,这里有一些 parsing examples. You can also configure it to use a different Date format,例如:

JsConfig.Init(new Config {
    DateHandler = DateHandler.ISO8601,
});

请注意,永远不要在 DTO 中放入任何实现逻辑,它们应该 impl-free class 仅用作惰性数据传输对象 (DTO)。

所有 DTO 还应该有一个无参数的构造函数,序列化器使用它在反序列化期间重新水化 DTO。

如果您想在 class 中添加 impl 逻辑,请将其放在一个单独的域模型中,您映射到一个普通的 DTO,该 DTO 是 return 从您的 API 编辑的。