我正在尝试使用 jQuery AJAX 调用 GET 请求将复杂对象传递给 ServiceStack。
代码如下:
型号:
public class Filter
{
#region constructors
public Filter()
{
}
#endregion
#region properties
[AutoIncrement]
[PrimaryKey]
public int ID { get; set; }
public bool? Huddles { get; set; }
public List<Activity> Activities { get; set; }
public string[] Looker { get; set; }
public string LookerGender { get; set; }
public string[] Lookee { get; set; }
public string LookeeGender { get; set; }
public DateTime? MinDate { get; set; }
public DateTime? MaxDate { get; set; }
public bool? ASAP { get; set; }
[References(typeof(ZipCode))]
public int? ZipCode { get; set; }
public int? Radius { get; set; }
#endregion
}
服务:
[Route("/v1/upfors/search")]
public class SearchUpFors
{
public Filter Filter { get; set; }
}
public class UpForService : Service
{
public List<UpForView> Get(SearchUpFors request)
{
OrmLiteConfig.DialectProvider = MySqlDialect.Provider;
string connectionString = System.Configuration.ConfigurationManager.ConnectionStrings["ufsbe"].ConnectionString;
using (IDbConnection db = connectionString.OpenDbConnection())
{
//TO DO
//Build where clause based on filter properties
List<UpForView> allUpFors;
//If Activity(ies) selected, get filtered list
if (request.Filter.Activities.Count > 0)
{
string[] activityNames = new string[request.Filter.Activities.Count];
int i=0;
foreach (Activity activity in request.Filter.Activities)
{
activityNames[i] = activity.Name;
i++;
}
allUpFors = db.Select<UpForView>(q => Sql.In(q.Activity, activityNames));
}
else
allUpFors = db.Select<UpForView>();
return allUpFors;
}
}
}
客户端代码:这会填充复杂对象并将其作为 JSON 传递到 ServiceStack 服务。
$('#frmFilter').submit(function (e) {
e.preventDefault();
var data = {};
var activities = [];
$('#ddlActivity :selected').each(function (i, selected) {
activities.push({ ID: $(selected).val(), Name: $(selected).text() });
});
data["Activities"] = activities;
data["ZipCode"] = $('#txtZipCode').text();
data["Radius"] = $('#txtRadius').text();
$.ajax({
url: "service url here",
type: "GET",
data: "{'Filter':" + JSON.stringify(data) + "}",
contentType: "application/json",
dataType: "xml"
});
});
问题:
该对象在服务中创建,但 request.Filter 的所有属性均为 null,甚至包括 Activity 对象。
任何建议将不胜感激......
最佳答案
SerivceStack 期待您 send your complex type格式为JSV不是JSON .
您可以使用 JSV 格式而不是 JSON 格式的请求,例如 JSV.js来自 ServiceStack 项目或实现您自己的 Request Binder反序列化 JSON。
public override void Configure(Container container)
{
RequestBinders.Add(typeof (SearchUpFors), (IHttpRequest httpReq) => {
var filter = JsonSerializer.DeserializeFromString<Filter>(httpReq.QueryString.Get("Filter"));
return new SearchUpFors {Filter = filter};
});
}
关于ajax - 需要帮助使用 jQuery AJAX 将复杂对象传递到 ServiceStack,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18070209/