2012-12-13 120 views
2

我有一個現有的應用程序發送帶有名爲'filters'的參數的請求。 'filters'參數包含一個JSON編碼的字符串。例如:ServiceStack - 請求綁定JSON編碼參數

[{"dataIndex":"fieldName", "value":"fieldValue"}, {"dataIndex":"field2", "value":"value2"}]. 

使用ServiceStack,我想將它作爲C#對象(類Grid)上的一個屬性進行綁定。 有沒有一種首選的方法來處理這個問題?以下是我能想到的選項。我不覺得任何'感覺'是正確的。

選項1: 我有一個'ServiceModel'項目,這將創建一個我不太喜歡它的依賴項。
在AppHost.Configure()方法中添加

RequestBinders[typeof(Grid)] => httpReq => { 
    return new Grid() { 
    Filters = new ServiceStack.Text.JsonSerializer<IList<Filter>>().DeserializeFromString(httpReq.QueryString["filters"]) 
    } 
} 

選項2: 似乎有點 '哈克'

public class Grid 
{ 
    private string _filters; 
    public dynamic Filters { 
    get 
    { 
     ServiceStack.Text.JsonSerializer<IList<Filter().DeserializeFromString(_filters); 
    } 
    set 
    { 
     _filters = value; 
    } 
    } 
} 

回答

0

您可以send Complex objects in ServiceStack使用JSV Format的。

public object Any(Request req) { 
    var filters = base.Request.QueryString["Filters"].FromJson<List<Filter>>(); 
} 

注:Interfaces on DTOs are bad practice

如果你想通過查詢字符串發送JSON你可以像從您的要求過濾器的服務中訪問它。

+0

消除了雙引號和空白符合JSV格式和默認綁定「正常工作」。一個陷阱就是我使用的是ExtJS庫,它似乎逃避了url中的所有字符,所以我需要解決這個問題。謝謝! – paaschpa