【问题标题】:web service should return json网络服务应该返回 json
【发布时间】:2012-01-02 13:18:41
【问题描述】:

我需要我的网络服务返回 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,为什么要定义命名空间?
  • 看起来现在两者都设置好了。你能去 YourPage.asmx/js 看看 Javascript 代理脚本吗?
  • @MikeChristensen 是的,这是可能的
  • 那你怎么称呼它?通常最好只包含代理 Javascript 文件,它将内容类型设置为 application/json 并正确设置所有内容。
  • @MikeChristensen 抱歉,我不确定我是如何做到的,请您解释一下。我尝试通过在jsonviewer.stack.hu 发布请求来从我的网络服务中读取数据

标签: c# json web-services asp.net-4.0


【解决方案1】:

您的网络服务定义看起来正确。确保您通过帖子调用服务并记住关键是将“内容类型”标头指定为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
    }
});

【讨论】:

  • 这表明网络服务正在运行,问题是我如何从我的 iPhone 应用程序中调用它。
【解决方案2】:

在开始之前添加以下参考:

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

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

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

empData 是 DataTable 中的 DataRows 数组。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-23
    • 1970-01-01
    相关资源
    最近更新 更多