我试图为KendoUI Grid做过滤功能。
Kendo将数据作为表单数据发送:
take:20
skip:0
page:1
pageSize:20
filter[filters][0][operator]:eq
filter[filters][0][value]:abc
filter[filters][0][field]:No
filter[logic]:and
我尝试使用dto反序列化它:
public class FilteringRule
{
public string Field { get; set; }
public string Operator { get; set; }
public string Value { get; set; }
}
public class FilteringInfo
{
public string Logic { get; set; }
public FilteringRule[] Filters { get; set; }
}
public class FilteredQuery
{
FilteringInfo Filter { get; set; }
//...
}
但反序列化失败:
'filter[filters][0][operator]' does not exist on type 'FilteredQuery'
'filter[filters][0][value]' does not exist on type 'FilteredQuery'
'filter[filters][0][field]' does not exist on type 'FilteredQuery'
'filter[logic]' does not exist on type 'FilteredQuery'
如何使这项工作?当我手动发送json而不是form-data时,它可以工作。
kendo可以发送json吗?设置contentType:" application / json"在数据源中没有帮助。 Kendo仍然以表单数据的形式发送数据,servicestack会抛出错误:"无法绑定请求"。
答案 0 :(得分:1)
ServiceStack允许sending complex objects via QueryStrings使用轻量级JSV语法,你的例子看起来像:
?filter={filters:[{operator:eq,value:abc,field:no}],{logic:and}}
但是由于Kendo不太可能支持这种语法,如果它支持JSON,你最好发送JSON,这自然会映射到你的DTO。