ajax - 需要帮助使用 jQuery AJAX 将复杂对象传递到 ServiceStack

标签 ajax json jquery servicestack ormlite-servicestack

我正在尝试使用 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/

相关文章:

php - 拉维尔 5.5 : 419 unknown status with AJAX

c# - ASP.NET - Ajax.BeginForm OnSuccess 回调与参数

jquery循环插件与wordpress,jquery没有定义?

javascript - 如何从异步调用返回响应?

php - 使用 jQuery AJAX 通过 FormData 上传文件

c++ - 从 C# : WebMessageBodyStyle. Wrapped 或 WebMessageBodyStyle.Bare 生成 JSON?

Python:for循环提前退出

java - 未找到 Groovy HTTP ResponseParseException

jquery - 如何在 laravel-datatables 上执行自定义脚本?

javascript - 不选取第 4 行之后的值