通常,Servicestack在反序列化作为参数传递的对象时非常有效。
对于在查询字符串上传递的复杂对象,它会查找JSV格式,如解释here
要反序列化在JSV中不在JSV中的查询字符串中传递的复杂DTO,我已在我的AppHost文件中以
的形式注册了自定义请求绑定器this.RegisterRequestBinder<MyCutommRequestDto>(httpReq => new MyCutommRequestDto()
{
Filters = CustomRequestDtoConverter.GetFilters(httpReq.QueryString)
}
);
在DTO中还有其他属性,我希望其他反序列化将由Servicestack正常完成。这可能吗?
我还想对所有具有相同属性的DTO应用这种反序列化(不同的DTO但都具有Filters属性)。
答案 0 :(得分:1)
您可以改为使用Request Filter并将通用功能应用于实现共享自定义IHasFilter
接口的所有DTO,而不是使用RequestBinder(而不是使用自己的默认请求绑定),例如:
this.RequestFilters.Add((httpReq, httpResp, requestDto) =>
{
var hasFilter = requestDto as IHasFilter;
if (hasFilter != null)
{
hasFilter.Filters = CustomDtoConverter.GetFilters(httpReq.QueryString);
}
});
这样ServiceStack继续反序列化请求,然后您就可以应用自己的反序列化逻辑了。