2013-06-19 65 views
1

一般來說,Servicestack在反序列化作爲參數傳遞的對象方面效果很好。僅適用於Servicestack自定義RequestBinder DTO屬性

有關傳遞複雜對象的查詢字符串,它看起來對JSV格式解釋here

反序列化的查詢字符串通過一個複雜的DTO不JSV我在形式註冊自定義請求粘結劑在我APPHOST文件

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

在DTO也有其他性質,我想,他們的反序列化的其餘部分將通過Servicestack完成正常。這可能嗎?

我也想在所有具有相同屬性的DTO上應用這種反序列化(不同的DTO,但都使用Filters屬性)。

回答

1

而不是使用RequestBinder(其覆蓋默認請求用自己的綁定),你也可以使用一個Request Filter和應用的通用功能,所有DTO的其中實現共享定製IHasFilter接口,例如:

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

這種方式ServiceStack繼續反序列化的請求,你可以應用你自己的反序列化邏輯。

+1

那不意味着反序列化會發生兩次嗎?即服務堆棧會嘗試反序列化並綁定請求,失敗或者對請求對象圖的某些部分執行不正確,然後自定義過濾器會再次運行反序列化器(或其他一些反序列化器)? –