使用c#web表单获取jquery序列化数据

时间:2013-08-02 12:00:37

标签: c# json serialization webforms

我需要使用c#webforms代码获取jquery序列化数据 我这样试试:

jQuery.ajax({
            type: "POST",
            url: "book_de_acoes.aspx/salvarSimulacaoAutomatica",
            data: JSON.stringify({ form: jQuery("#aspnetForm").serialize() }),
            dataType: "json",
            contentType: "application/json; charset=utf-8",
            success: function (callback) {
                alert(callback);
            }
        });

c#代码背后:

[WebMethod(true)]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public static bool salvarSimulacaoAutomatica(string form)
{
    try
    {
        System.Web.Script.Serialization.JavaScriptSerializer js = new System.Web.Script.Serialization.JavaScriptSerializer();
         var formData = js.Deserialize<object>(form);
    }
    catch(Exception e)
    {
    }
    return true;
}

但是客场出现错误:

  

System.ArgumentException:无效的JSON原语:ctl00。在   System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializePrimitiveObject()   在   System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeInternal(的Int32   深度)   System.Web.Script.Serialization.JavaScriptObjectDeserializer.BasicDeserialize(字符串   输入,Int32 depthLimit,JavaScriptSerializer序列化程序)at   System.Web.Script.Serialization.JavaScriptSerializer.Deserialize(JavaScriptSerializer   serializer,String input,Type type,Int32 depthLimit)at   System.Web.Script.Serialization.JavaScriptSerializer.Deserialize [T](字符串   输入)   PortalSuvinil.admin_portal.book.book_de_acoes.salvarSimulacaoAutomatica(字符串   形式)

获取此数据的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

这里的问题是jQuery.serialize()不会创建JSON。它创建标准的表单url编码数据,如下所示:

'single=Single&multiple=Multiple&multiple=Multiple3&check=check2&radio=radio1'

这不会转换为任何有意义的JSON,因为它只是一个巨大的字符串。

诀窍是使用jQuery.serializeArray()代替,这将生成一个可以序列化为JSON的对象。

[{name:'single',value:'Single'},{name:'multiple',value:'Multiple'}]

此链接可以向您展示如何在PageMethod:http://www.asp.net/ajaxlibrary/jquery_webforms_post_data_to_pagemethod.ashx

中处理该数据