2015-08-26 63 views
0

有誰知道在C#中的標準庫(或模型聯編程序)來解析JQuery風格的序列化過濾器(和排序),就像從Kendo數據源傳遞的?解析查詢字符串過濾/排序傳遞JQuery風格

所以解析一個查詢字符串像這樣強類型數組(S)與過濾和排序對象:

sort[0][field]=status.name&sort[0][dir]=desc&filter[logic]=and&filter[filters][0][field]=status.name&filter[filters][0][operator]=eq&filter[filters][0][value]=Sold 

我試圖尋找,但我大多似乎碰到不完整的實現或JavaScript樣本不幸。

更新:我沒有意識到這種格式已經被標準支持,直到@Lali指出這是標準的體形序列化。

我現在解決它通過創建一些類,只是用這個作爲參數爲Web API的行動,它神奇地工作:

public async Task<IHttpActionResult> Get([FromUri] ListSelectionOptionsWithFilter options) 
{ 
    //query something 
} 

public class ListSelectionOptionsWithFilter 
{ 
    public int? Skip { get; set; } 
    public int? Take { get; set; } 
    public List<ListSortOption> Sort { get; set; } 
    public ListFilterOptions Filter { get; set; } 
} 

public class ListFilterOptions 
{ 
    public string Logic { get; set; } 
    public List<ListFilterOption> Filters { get; set; } 
} 

public class ListFilterOption 
{ 
    public string Field { get; set; } 
    public string Operator { get; set; } 
    public string Value { get; set; } 
} 

public class ListSortOption 
{ 
    public string Field { get; set; } 
    public string Dir { get; set; } 
} 
+0

通過這個數據:

我現在解決它通過創建一些類,只是用這個作爲參數爲Web API的行動,它只是神奇地運行。如果namings匹配,你可以將所有東西放入單個對象中。我能幫你嗎? – Lali

+0

@Lali以及我更喜歡讓它保持一個GET請求,並且不應該有一個正確的權利?但是你確實給了我一個使用form body parser的想法,讓我檢查一下,謝謝! –

+0

我通過解析請求並將所有參數放置在對象中並使所有控制器都可訪問該對象(BaseController繼承)來實現'BaseController'。只是一個想法。 – Lali

回答

0

我沒有意識到已經是標準支持這種格式,直到@拉里指出這是標準的身體形式系列化。在請求主體,而不是查詢字符串發送

public async Task<IHttpActionResult> Get([FromUri] ListSelectionOptionsWithFilter options) 
{ 
    //query something 
} 

public class ListSelectionOptionsWithFilter 
{ 
    public int? Skip { get; set; } 
    public int? Take { get; set; } 
    public List<ListSortOption> Sort { get; set; } 
    public ListFilterOptions Filter { get; set; } 
} 

public class ListFilterOptions 
{ 
    public string Logic { get; set; } 
    public List<ListFilterOption> Filters { get; set; } 
} 

public class ListFilterOption 
{ 
    public string Field { get; set; } 
    public string Operator { get; set; } 
    public string Value { get; set; } 
} 

public class ListSortOption 
{ 
    public string Field { get; set; } 
    public string Dir { get; set; } 
}