asp.net webservice返回json类型

时间:2012-04-06 11:38:37

标签: json web-services

使用asp.net webservice方法:

[WebMethod(EnableSession = true)]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public List<MyObject> GetList()
{
    ....return new List of MyObject{ x =  .., y = .. , z = ..};
}

使用该服务的客户端是使用JQuery Ajax调用正常工作

$.ajax({
        type: "POST",
        url: url,
        data: data == null ? "{}" : data,
        contentType: "application/json; charset=utf-8",
        dataType: "json",
 ..... and so on ... 

但是对于firebug,我注意到响应是:

{"d":[{"__type":"Common.MyObject","z":"2000","x":1500,"y":1000,"a":"0"},{"__type":"Common.MyObject","z":"2000","x":1455,"y":1199.57,"a":"1"} ...... and so on ]}

1)问题是为什么我需要这个“”__type“:”Common.MyObject“?
2)我想删除它以便响应更小,我该怎么做?

3 个答案:

答案 0 :(得分:2)

当我将Web服务配置为这样时,它对我来说很好:

[ServiceContract]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]
class MyObjectService
{
    [OperationContract]
    [WebGet(UriTemplate = "MyObjects", ResponseFormat = WebMessageFormat.Json)]
    public IEnumerable<MyObect> GetAlMylObjects()
    {
        MyObjectMgr objectMgr = new MyObjectMgr();
        return objectMgr.GetAll();
    }

}

以下是MyObjectMgr的代码:

public class MyObjectMgr
{
    public List<MyObect> GetAll()
    {
        List<MyObect> objList = new List<MyObect>();
        objList.Add(new MyObect { x = 1, y = 21, z = 33 });
        objList.Add(new MyObect { x = 4, y = 51, z = 66 });
        return objList;

    }
}

这是响应的样子:

[{"x":1,"y":21,"z":33},{"x":4,"y":51,"z":66}]

我使用的是GET而不是POST,但我认为这不会有任何区别。通常对于REST API,如果您只是要检索要使用GET的信息。

我已经停止使用WCF进行RESTful Web服务,因为它很难配置和使用。我已经开始使用ASP.NET Web API,这是即将发布的MVC 4.0版本的一部分。设置RESTful API要容易得多。您不必在服务中指定是否需要JSON或XML。客户端可以在HTTP标头中指定它,它应该如何工作。

答案 1 :(得分:1)

好的,我用httpmodule和regex来改变响应

httpmodule: http://bloggingabout.net/blogs/adelkhalil/archive/2009/08/14/cross-domain-jsonp-with-jquery-call-step-by-step-guide.aspx#525423

正则表达式: https://stackoverflow.com/a/6349813/1218546

它适用于所有服务方法

答案 2 :(得分:0)

抱歉迟到的回复!我最近遇到了类似的问题。通过执行以下操作,我能够在不重写服务的情况下修复它:

  • 转到您的web.config文件

  • 找到行为。

    就我而言,行为被称为“Project1.Services.DataTableAspNetAjaxBehavior”,这是在 <system.serviceModel>
    <behaviors>
    <endpointBehaviors>

照片: enter image description here

  • 最后,为您的行为添加<webHttp defaultOutgoingResponseFormat="Json" />

(注意:如果您想保留包装,请使用添加:
<webHttp defaultBodyStyle="Wrapped" defaultOutgoingResponseFormat="Json" />左或<webHttp defaultBodyStyle="WrappedResponse" defaultOutgoingResponseFormat="Json" />

我希望这有帮助!快乐的编码!