【问题标题】:ASP.NET WebMethod receive JSON string?ASP.NET WebMethod 接收 JSON 字符串?
【发布时间】:2020-08-14 17:24:23
【问题描述】:

我正在尝试通过带有 JSON 字符串的 ajax 调用 WebMethod,如下所示:

                let jsonData = JSON.stringify({test: "Test"});

                $.ajax({
                    type: "POST",
                    url: "WebForm.aspx/DoStuff",
                    data: '{data: "' + jsonData + '" }',
                    contentType: "application/json; charset=utf-8",
                    dataType: "json",
                    success: OnSuccess,
                    failure: function (response) {
                        alert(response.d);
                    }
                });

但是,我收到了 HTTP 500 内部错误。

我想在 WebMethod 中解析 JSON 字符串,因为我不知道运行时的值。 WebMethod 如下所示:

        [WebMethod]
        public static string DoStuff(string data)
        {
            var keyValuePairs = JsonConvert.DeserializeObject<Dictionary<string, string>>(data);
            foreach (var key in keyValuePairs.Keys)
            {
                ...
            }

            return ...
        }

【问题讨论】:

    标签: c# asp.net ajax webforms


    【解决方案1】:

    好的,问题出在 ajax 请求中的数据格式上。以下工作:

                let jsonData = JSON.stringify({test: "Test"});
                let data = { data: jsonData };
    
                $.ajax({
                    type: "POST",
                    url: "SomePage.aspx/DoStuff",
                    data: JSON.stringify(data),
                    contentType: "application/json; charset=utf-8",
                    dataType: "json",
                    success: OnSuccess,
                    failure: function (response) {
                        alert(response.d);
                    }
                });
    

    【讨论】:

      【解决方案2】:

      如果您使用的是 newtonsoft,请尝试将 json 数据解析为 JObject,如果您想在 .net core 3 System.Text.Json 中使用 Microsoft 的 Json 库,请尝试将 JSONDocument 解析

      https://www.newtonsoft.com/json/help/html/ParseJsonObject.htm

      https://docs.microsoft.com/en-us/dotnet/standard/serialization/system-text-json-how-to#use-jsondocument-for-access-to-data

      使用 System.Text.Json 的示例

      using (JsonDocument jsonDoc = JsonDocument.Parse(data))
      {
          JsonElement root = jsonDoc.RootElement;
          JsonElement dataEl = root.GetProperty("Data");
          var testEl = dataEl.GetProperty("Test")
          ...
      }
      

      【讨论】:

        猜你喜欢
        • 2014-09-04
        • 2011-08-18
        • 2015-07-01
        • 2013-06-14
        • 2018-05-29
        • 2019-03-03
        • 1970-01-01
        • 2018-06-30
        • 1970-01-01
        相关资源
        最近更新 更多