2013-06-20 69 views
0

我正在使用jquery & ajax進行搜索和更新頁面的MVC4應用程序。通常搜索我創建一個JavaScript對象,並將其發佈到我的ApiController,其中post參數映射到我的.NET搜索輸入對象。發送JavaScript對象到服務器並使用GET請求反序列化

我需要發送相同的JavaScript搜索對象到服務器,但作爲GET請求,所以我使用$ .param()來串行化對象。

是否有一種簡單的方法來將查詢字符串反序列化爲我的.NET搜索輸入對象?

這裏是查詢字符串的一個簡化版本,創建:這裏

Search[ListId]=41&Search[Query]=test&Search[SortBy]=Location&Search[SortDirection]=Descending&Search[UserTypes][]=2&Search[UserTypes][]=5&Search[UserTypes][]=9&Export[PDF]=false&Export[XLS]=true&Export[XML]=true 

ANDS是SearchInput對象我試圖反序列化到:

public class SearchInput 
{ 
    public Search Search { get; set; } 
    public Export Export { get; set; } 
} 

public class Search 
{ 
    public int ListId { get; set; } 
    public string Query { get; set; } 
    public ListViewConfig.SortBy SortBy { get; set; } 
    public SortDirection SortDirection { get; set; } 
    public List<int> UserTypes { get; set; } 
} 

public class Export 
{ 
    public bool PDF { get; set; } 
    public bool XLS { get; set; } 
    public bool XML { get; set; } 
} 

SortBy & SortDirection是枚舉。

回答

0

好吧,我剛剛解決我自己的問題,但我擺脫$ .PARAM()

我編碼我的對象使用JSON,URI進行編碼,併發送整個事情我控制器操作作爲查詢字符串參數:

var data = { Search: searchInput, Export: exportInput }; 
var url = "/ListViews/Export/"; 
var json = encodeURIComponent(JSON.stringify(data)); 
var fullUrl = url + "?json=" + json; 

然後在我的控制,我只是用JsonConvert.DeserializeObject到JSON映射到.NET對象:

var o = JsonConvert.DeserializeObject<ExportObject>(json); 

.NET類:

public class ExportObject 
{ 
    public ListViewsApiController.SearchInput Search { get; set; } 
    public ExportInput Export { get; set; } 
} 

public class ExportInput 
{ 
    public bool PDF { get; set; } 
    public bool XLS { get; set; } 
    public bool XML { get; set; } 
} 

public class SearchInput 
{ 
    public int ListId { get; set; } 
    public string Query { get; set; } 
    public ListViewConfig.SortBy SortBy { get; set; } 
    public SortDirection SortDirection { get; set; } 
    public List<int> UserTypes { get; set; } 
}