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

c# – ASMX webservice – 返回JSON而不是XML

发布时间:2020-12-15 08:43:25 所属栏目:百科 来源:网络整理
导读:我有一个包含一种方法的Web服务: [WebMethod]public string Movies(){ using (var dataContext = new MovieCollectionDataContext()) { var query = dataContext.Movies.Select(m =new{m.Title,m.ReleaseDate}).Take(20); var serializer = new JavaScriptS
我有一个包含一种方法的Web服务:
[WebMethod]
public string Movies()
{
    using (var dataContext = new MovieCollectionDataContext())
    {
        var query = dataContext.Movies.Select(m =>new{m.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 Data Source的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中使用它?我哪里错了?

解决方法

您需要指定方法的 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"

(编辑:李大同)

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

    推荐文章
      热点阅读