如何将JSON发送到Asp.NET Webservice?

时间:2011-02-24 15:56:38

标签: javascript jquery asp.net ajax json

我有一个javascript对象,我使用JSON2库进行序列化。然后我尝试将此JSON字符串传递给ASP.net Web服务。我已经改变了webmethod来尝试几种不同的参数配置,但它们都会导致'500 - 内部服务器错误'

有人能给我一些线索吗?

 function postDataToService(data) {
    $.ajax({
        url: "http://localhost:2686/DataCollectionService.asmx/StoreDataOut",
        type: "POST",
        contentType: "application/json; charset=utf-8",
        data: data,
        success: showSuccessNotice,
        error: showFailureNotice,
        dataType: "json"
    });

} //postdatatoservice

function convertDataToJSON(jsObj) {

    return JSON.stringify({ list: jsObj });

} //converdatatojson

网络服务:

 [WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
// To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
[System.Web.Script.Services.ScriptService]
public class DataCollectionService : WebService
{

    [WebMethod]
    [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
    public string StoreDataOut(List<string> list)
    {
        return "Complete";
        //model functionality
    }
}

2 个答案:

答案 0 :(得分:3)

我明白了..

第1步:我将JS对象包装在另一个对象中,该对象包含与web方法中的参数名称匹配的属性。

周围的引号
return JSON.stringify({'json':jsObj});

第2步然后,我使用JSON.stringify()序列化了这个新的'wrapper'对象。

步骤3 Web方法的参数名称与已发布的json属性名称匹配。类型是'对象'

 public string StoreDataOut(object json)
    {

    }

答案 1 :(得分:2)

我使用了您提供的代码,并且能够毫无问题地发布到网络服务。

有些问题:

  1. 数据是什么样的?
  2. 什么是500服务器错误?您可以直接浏览网络服务而不会出错吗? http://localhost:2686/DataCollectionService.asmx/StoreDataOut
  3. 我注意到你的数据发送给你的人从不打电话convertDataToJSON()这是一个错字吗?如果不执行如下的ajax帖子:

  4.    $.ajax({
                url: "http://localhost:2686/DataCollectionService.asmx/StoreDataOut",
                type: "POST",
                contentType: "application/json; charset=utf-8",
                data: convertDataToJSON(data),
                success: showSuccessNotice,
                error: showFailureNotice,
                dataType: "json"
        });