1

是否可以配置默认的 ASP.NET WebService 测试表单以支持 JSON?我的意思是内置在.NET框架中的测试表单......

目前我有一个用 装饰的 WebService [ScriptService],但是当我使用内置的测试表单页面对其进行测试时,它返回 XML ...我假设,这是因为测试页面默认发送 Content-Type XML。

谢谢

编辑(示例)
我有课:

public class Person
{
  public string FirstName { get; set; }
  public string LastName { get; set; }
}

现在我有了 ASP.NET WebService:

[ScriptService]
public class PersonService : WebService
{
  [WebMethod]
  public Person GetDave()
  {
    Person dave = new Person();

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

    return dave;
  }
}

当我使用 jQuery AJAX 从网页调用此 WebService 时,我{"FirstName":"Dave","LastName":"Test"}在 JavaScript 中收到 JSON Person 对象(不是字符串),但是当我从 ASP.NET WebService 测试表单调用此 WebService 时(当我右键单击 ASMX 文件并使用“Preview In浏览器"),

在此处输入图像描述

它返回:

<?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>Test</LastName> 
</Person>

想要的是当我从测试页面调用服务时,看到相同的输出:

{"FirstName":"Dave","LastName":"Test"}
4

3 回答 3

1

您可以使用下面的代码

[WebMethod(Description = "Some Description")]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public string FunctionName()
{           
    // Return JSON data
    JavaScriptSerializer js = new JavaScriptSerializer();
    string retJSON = js.Serialize(Object);
    return retJSON;
}

而且您还需要添加参考。

更新

这是解释如何扩展现有 ASP.NET Web 服务以支持 JSON的链接

希望有帮助

于 2013-07-22T07:43:23.563 回答
1

看起来我找到了解决方案......它仍然不是完整的解决方案,但这是要走的路:)

[Drive]:\[WindowsDir]\Microsoft.NET\Framework\[Version]\CONFIG文件夹中,存在名为DefaultWsdlHelpGenerator.aspx. 该文件包含使用 WSDL 自动生成测试页面所需的全部代码。现在我可以使用这段代码编写我自己的测试页面并使用 jQuery 而不是使用 HTML 表单发出请求......然后我可以放入配置文件,这应该可以工作。

<webServices>
      <wsdlHelpGenerator href="WSTestPage.aspx"/>
</webServices>

也许某处存在更简单/现成的方法来做到这一点,但我仍然没有找到它......

于 2013-07-22T10:45:43.497 回答
0

首先添加以下引用

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

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

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

dr 是 DataTable 中的 DataRows 数组。希望这会对您有所帮助。

于 2013-07-22T07:32:34.803 回答