【问题标题】:Trouble Passing JSON Stringified Array to PageMethod将 JSON 字符串化数组传递给 PageMethod 时遇到问题
【发布时间】:2011-07-07 11:26:12
【问题描述】:

我在将 JSON 字符串化数组传递给 PageMethod 时遇到问题

[{
    "StartDate": "3/1/2011",
    "EndDate": "3/31/2011",
    "UserId": "8",
    "DdlViewSelectedValue": "zzz#",
    "DdlViewSelectedItem": "zzz",
    "DdlOrgSelectedValue": "8"
}, {
    "StartDate": "3/1/2011",
    "EndDate": "3/31/2011",
    "UserId": "9",
    "DdlViewSelectedValue": "zzz#",
    "DdlViewSelectedItem": "zzz",
    "DdlOrgSelectedValue": "8"
}, {
    "StartDate": "3/1/2011",
    "EndDate": "3/31/2011",
    "UserId": "5",
    "DdlViewSelectedValue": "zzz#",
    "DdlViewSelectedItem": "zzz",
    "DdlOrgSelectedValue": "8"
}, {
    "StartDate": "3/1/2011",
    "EndDate": "3/31/2011",
    "UserId": "13",
    "DdlViewSelectedValue": "zzz#",
    "DdlViewSelectedItem": "zzz",
    "DdlOrgSelectedValue": "8"
}, {
    "StartDate": "3/1/2011",
    "EndDate": "3/31/2011",
    "UserId": "6",
    "DdlViewSelectedValue": "zzz#",
    "DdlViewSelectedItem": "zzz",
    "DdlOrgSelectedValue": "8"
}, {
    "StartDate": "3/1/2011",
    "EndDate": "3/31/2011",
    "UserId": "11",
    "DdlViewSelectedValue": "zzz#",
    "DdlViewSelectedItem": "zzz",
    "DdlOrgSelectedValue": "8"
}]

当我收到这个 ajax 请求时,'jsonText' 包含上面列出的数据

    function GetUserSchedules() {           
        var jsonText = $.toJSON(arrParams);
        $.ajax({
            type: "POST",
            url: "/myurl/jquery.aspx/GenerateUserSchedules",
            data: "{" + jsonText + "}",
            contentType: "application/json",
            dataType: "json",
            success: AjaxSucceeded
            ,
            error: AjaxFailed
        });
    }

页面方法:

    [System.Web.Script.Services.ScriptMethod]
    [System.Web.Services.WebMethod]
    public static void GenerateUserSchedules(Data[] data)
    {
    //do stuff; will return data but for now, just keeping it like this
            System.Web.Script.Serialization.JavaScriptSerializer serializer = new System.Web.Script.Serialization.JavaScriptSerializer();       
}

数据类:

[Serializable]
public class Data
{
    public DateTime StartDate { get; set; }
    public DateTime EndDate { get; set; }
    public int UserID { get; set; }
    public string ViewSelectedValue { get; set; }
    public string ViewSelectedItem { get; set; }
    public string OrgSelectedValue { get; set; }
}

每次发送 ajax 请求时,都会执行错误函数。我做错了什么?

【问题讨论】:

  • 报错函数是什么?
  • 实际上,jsonText 是在哪里发送到服务的?我看到 scheduleRows 正在发送,但 jsonText 没有发送。
  • 抱歉,打错字了...我已经更正了代码
  • 消息是 {Message":"There was an error processing the request.", ","StackTrace":"","ExceptionType":""} Status is '500' StatusText is '错误'ReadyState 是 '4'

标签: c# jquery json


【解决方案1】:

这是日期的常见问题。 JavaScriptSerializer 需要以下格式的日期才能成功解析它们:

{
    "StartDate": "\/Date(983401200000)\/",
    "EndDate": "\/Date(985989600000)\/",
    "UserId": "8",
    "DdlViewSelectedValue": "zzz#",
    "DdlViewSelectedItem": "zzz",
    "DdlOrgSelectedValue": "8"
}

其中983401200000 表示自 1970 年 1 月 1 日以来的世界协调时间 (UTC) 毫秒数。

引用自documentation

日期对象,在 JSON 中表示为 “\/日期(刻度数)\/”。这 刻度数为正数或 负长值,表示 滴答数(毫秒) 自午夜 01 起已过去 UTC 时间 1970 年 1 月。

支持的最大日期值为 最大值(12/31/9999 晚上 11:59:59)和 支持的最小日期值为 最小值(1/1/0001 12:00:00 AM)。

【讨论】:

  • 这是一个有用的提示,但我还没有开始在页面方法中反序列化
  • @Bengal,是的,您还没有,但即使在调用您的方法之前,它也会自动完成。并且由于对 Data[] 实例的反序列化失败,因此调用了错误回调。您不应该手动序列化/反序列化。它是为输入/输出参数自动完成的。
  • 感谢您的反馈。我确实按照您的建议更改了日期,但仍然没有运气。顺便说一句,应该如何将日期转换为您描述的格式?
  • @Bengal - 我从来没有遇到过日期问题!这里的答案之一显示了如何做到这一点。 stackoverflow.com/questions/1224793/…
猜你喜欢
  • 2018-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-07
  • 1970-01-01
  • 1970-01-01
  • 2018-12-09
相关资源
最近更新 更多