2

一般来说,Servicestack 在反序列化作为参数传递的对象方面工作得很好。

对于在查询字符串上传递的复杂对象,它会查找 JSV 格式,如此处所述

为了反序列化不是在 JSV 中的查询字符串中传递的复杂 DTO,我在我的 AppHost 文件中注册了一个自定义请求绑定器,格式为

this.RegisterRequestBinder<MyCutommRequestDto>(httpReq => new MyCutommRequestDto()
   {
      Filters = CustomRequestDtoConverter.GetFilters(httpReq.QueryString)
   }
);

在 DTO 中还有其他属性,我希望它们的其余反序列化将由 Servicestack 正常完成。这可能吗?

我还想对所有具有相同属性的 DTO 应用这种反序列化(不同的 DTO,但都具有 Filters 属性)。

4

1 回答 1

1

而不是使用 RequestBinder(它用您自己的覆盖默认请求绑定),您可以改为使用请求过滤器并将通用功能应用于实现共享自定义IHasFilter接口的所有 DTO,例如:

this.RequestFilters.Add((httpReq, httpResp, requestDto) =>
{
    var hasFilter = requestDto as IHasFilter;
    if (hasFilter != null)
    {
        hasFilter.Filters = CustomDtoConverter.GetFilters(httpReq.QueryString);
    }
});

这样,ServiceStack 会继续反序列化请求,之后您就可以应用自己的反序列化逻辑。

于 2013-06-19T14:06:55.673 回答