ASMX webservice - 返回 JSON 而不是 XML

Posted

技术标签:

【中文标题】ASMX webservice - 返回 JSON 而不是 XML【英文标题】:ASMX webservice - return JSON instead of XML 【发布时间】:2012-04-12 11:23:16 【问题描述】:

我有一个包含一种方法的网络服务:

[WebMethod]
public string Movies()

    using (var dataContext = new MovieCollectionDataContext())
    
        var query = dataContext.Movies.Select(m =>newm.Title,m.ReleaseDate).Take(20);
        var serializer = new javascriptSerializer();
        return serializer.Serialize(query);
    

该方法正确序列化对象,但是当我在 FireBug 中查看响应时,它看起来像这样:

<?xml version="1.0" encoding="utf-8"?>
<string xmlns="http://tempuri.org/">["Title":"SQL","ReleaseDate":"\/Date(1224007200000)\/","Title":"Termonator Salvation","ReleaseDate":"\/Date(1224007200000)\/"]</string>

这是我使用 Kendo 数据源的 jQuery 方法

$(function () 
    alert("Welcome To Kendo");
    var dataSource = new kendo.data.DataSource(
                
                    transport: 
                        read: 
                            type: "POST",
                            dataType: "json",
                            url: "/MovieService.asmx/Movies"
                           // contentType: "application/json; charset=utf-8"

                        
                    ,
                    change: function (e) 
                        alert(e);

                    ,
                    error: function (e) 
                        alert(e[2]);
                    ,
                    pageSize: 10,
                    schema: 
                        data: "d"

                    


                );

    $("#MovieGridView").kendoGrid(
        dataSource: dataSource,
        height: 250,
        scrollable: true,
        sortable: true,
        pageable: true,
        columns: [
             field: "Title", title: "Movie Name" ,
             field: "ReleaseDate", title: "Movie Release" 
            ],
        editable: "popup",
        toolbar: ["create"]
    );
);

上面的代码显示了我在 jQuery 中所做的事情以及当错误事件调用时我得到了这个错误

SyntaxError: JSON.parse: unexpected character

如何将上述数据转换为 JSON,以便在 jQuery 中使用?我哪里错了?

【问题讨论】:

为什么在这里使用 JSONP?这没有意义。 好的,我删除了 jsonp,但问题还是一样,请解决它 我通过使用 WCF 和 JSONP 找到了另一种方法,它非常酷的组合并且完美地工作 你需要json和xml或者只有json 【参考方案1】:

需要指定方法的ResponseFormat

[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public string GetMovies() 

注意:为了其他遇到类似问题的人,请注意您应该使用POST 请求,而不是GET 请求,这一点也很重要。见:JSON Hijacking and How ASP.NET AJAX 1.0 Avoids these Attacks


编辑

根据您发布的 jQuery,您没有调用正确的方法。您的 C# 定义了一个名为 GetMovies 的方法,但您的 jQuery 正在尝试调用一个名为 `Movies' 的方法。

这个:

url: "/MovieService.asmx/Movies"

应该改成这样:

url: "/MovieService.asmx/GetMovies"

【讨论】:

@HaseebKhan,首先,不要叫我亲爱的:-)。其次,这是返回 JSON 格式数据的正确方法。请查看我的回答,并确认您已在测试环境中正确实施。 查看我更新的问题,以便您清楚我在做什么以及哪里出错了!对不起,我叫你亲爱的。 是的,是的,当然我删除了 get 并写了这一行 [ScriptMethod(ResponseFormat = ResponseFormat.Json)] 但我的问题仍然没有解决 但问题依旧 @HaseebKhan,根据您提供的信息,您可以从投票中看出,这是正确的答案。要么提供更多信息,要么花一秒钟或第三次查看您的代码。

以上是关于ASMX webservice - 返回 JSON 而不是 XML的主要内容,如果未能解决你的问题,请参考以下文章

从 ajax 调用 webservice asmx 返回 404 错误

webservices 更改 ASMX Web 服务返回的命名空间前缀

ajax 调用 webService

[WebMethod]的使用,ajax调用[WebMethod]的使用,webservice(web服务) asmx的使用,ajax调用[WebMethod]进行json传输

WebService,ASMX文件使用XML格式数据传递参数验证与获取XML格式返回值的一种方式

asmx Web ServiceWeb API