加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – Asmx web服务如何返回JSON而不是XML?

发布时间:2020-12-16 01:20:53 所属栏目:百科 来源:网络整理
导读:我的服务方式: [WebMethod][ScriptMethod(ResponseFormat = ResponseFormat.Json)]public string getDataFromTrainingMaster(){ ListTrainingMasterDataStruct results = new DAL().GetDataFromTrainingMaster(); JavaScriptSerializer js = new JavaScript
我的服务方式:

[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public string getDataFromTrainingMaster()
{
    List<TrainingMasterDataStruct> results = new DAL().GetDataFromTrainingMaster();
    JavaScriptSerializer js = new JavaScriptSerializer();                    
    return js.Serialize(results).ToString(); 
}

我的.net Web服务返回包含在XML中的JSON,如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<string xmlns="http://tempuri.org/">   [{"Training_Code":"1234 ","Training_Duration":"2hrs ","Training_Startdate":"2/14/2013 3:00:00 PM","Training_Enddate":"2/14/2013 5:00:00 PM","Trainer_ID":1,"Training_Location":"B-Wing Training room-4","Comments":"C# training","Keyword":"C#1234","NumberofDays":1},{"Training_Code":"4321 ","Training_Duration":"16 ","Training_Startdate":"2/17/2013 10:30:00 AM","Training_Enddate":"2/17/2013 5:30:00 PM","Trainer_ID":2,"Training_Location":"A-Wing Training Room-6","Comments":"Objective-C","Keyword":"Obj-C4321","NumberofDays":2}]

我需要它采用以下格式:

"Training":[{"Training_Code":"1234 ","NumberofDays":2}]</string>

我怎样才能做到这一点?

解决方法

您无需自己创建JSON字符串.返回列表< TrainingMasterDataStruct>并让.NET在运行时为您串行化:

[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public List<TrainingMasterDataStruct> getDataFromTrainingMaster()
{
   List<TrainingMasterDataStruct> list = doStuff();
   return list;
}

其次,非静态方法签名表明这是一个asmx文件(页面方法是静态的).默认情况下,这些序列化为xml,因此您需要取消注释或将System.Web.Script.Services.ScriptService属性添加到Web服务类:

[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.Web.Script.Services.ScriptService]
public class WebService : System.Web.Services.WebService {

这允许它返回JSON.一个问题:JSON序列化程序似乎能够序列化比XML更多的类型,所以如果你想输出/或 – 在这里使用Lists和数组而不是集合,请小心.

第三,也是非常重要的是,CLIENT必须向服务器指出它需要JSON响应.

为了测试和验证第三点,我建议您按照上述步骤,然后使用jQuery从测试网页调用Web服务并监视Fiddler中的流量.如下所示:

$.ajax({
        type: "POST",url: "WebService.asmx/getDataFromTrainingMaster",contentType: "application/json; charset=utf-8",dataType: "json",data: "",success: function (msg) { }
    });

这就是JSON请求/响应的样子 – 特别注意POST,Accept和Content-Type标头:

POST http://scrubbed/GetVehicles HTTP/1.1
x-requested-with: XMLHttpRequest
Accept-Language: en-gb
Accept: application/json,text/javascript,*/*
Content-Type: application/json; charset=utf-8
Accept-Encoding: gzip,deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E; InfoPath.2)
Host: scrubbed
Content-Length: 0
Connection: Keep-Alive
Pragma: no-cache

HTTP/1.1 200 OK
Cache-Control: private,max-age=0
Content-Type: application/json; charset=utf-8
Server: Microsoft-IIS/7.5
X-Powered-By: ASP.NET
Date: Mon,04 Oct 2010 10:49:12 GMT
Content-Length: 1417

{"d":{"Data":[{"Key":1,"Value":[{"VehicleId":15036,"VehicleAlias":"Whatever","Expiry":"/Date(1915983035043)/","Expired":false},{"VehicleId":

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读