Web服务应该返回JSON。

5
我需要我的网络服务返回JSON...
我在我的.asmx文件中有以下代码:
namespace Feed
{
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]

    [System.Web.Script.Services.ScriptService]
    public class searchPerson : System.Web.Services.WebService
    {

        [WebMethod]
        [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
        public Person GetDave()
            {
                Person dave = new Person();

                dave.FirstName = "Dave";
                dave.LastName = "Ward";

         return dave;
        }
    }
}

这将返回以下结果:

<?xml version="1.0" encoding="utf-8"?>
<Person xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://tempuri.org/">
  <FirstName>Dave</FirstName>
  <LastName>Ward</LastName>
</Person>

我该如何强制返回JSON而不是XML?

如果你需要JSON而不是XML,为什么要定义一个命名空间? - Oded
看起来现在已经设置好了.. 你能否前往 YourPage.asmx/js 并查看 JavaScript 代理脚本? - Mike Christensen
@MikeChristensen 是的,这是可能的。 - Mikael
那你是如何调用它的?通常最好的方法是包含代理 JavaScript 文件,这将设置内容类型为 application/json 并正确设置所有内容。 - Mike Christensen
@MikeChristensen 抱歉,我不确定如何做到这一点,您能否解释一下。我尝试通过在http://jsonviewer.stack.hu/上发布请求来从我的Web服务中读取数据。 - Mikael
看一下这个例子。http://debugmode.net/2011/05/15/wcf-rest-service-with-josn-data/. - Chad
2个回答

5
您的webservice定义看起来是正确的。请确保通过post方式调用服务,并记住关键点是指定“内容类型”头为application/json
(这是使用jQuery,但如果您愿意,也可以使用低级别的javascript)
$.ajax({
    type: "POST",
    contentType: "application/json; charset=utf-8;",
    url: "http://MyWebServiceURL",
    data: JSON.stringify({ ParameterName: "DataToSend" }),
    dataType: "json",
    success: function (data, textStatus, jqXHR) {
        //do something
    },
    error: function (jqXHR, textStatus, errorThrown) {
        //fail nicely
    }
});

这表明Web服务正在工作,问题在于我如何从我的iPhone应用程序中调用它。 - Mikael

1

开始前请添加以下参考资料:

using System.Web.Script.Services;
using System.Web.Script.Serialization;

在您的方法中使用以下代码,将任何数据转换为JSON数据格式:

JavaScriptSerializer serializer = new JavaScriptSerializer();
return serializer.Serialize(empData);

empData是来自DataTable的DataRow数组。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接