【问题标题】:asp.net web service and extra qouatation in json result !asp.net web 服务和 json 结果中的额外 qouatation !
【发布时间】:2011-03-21 18:12:04
【问题描述】:

我想在 javascript 中调用 Web 服务方法。 (asp.net 3.5)

我已经用 firebug 追踪了结果。 结果如下:

{"d":"[{\"TI\":\"www\"},{\"TI\":\"www1\"}]"}

我觉得正确的结果应该是这样的

{"d":[{\"TI\":\"www\"},{\"TI\":\"www1\"}]}

括号前后的引号是什么?

// 编辑: 在网络服务中:

public class Test
    {
        public Test(string t){T1 = t;}
        public string T1 { set; get; }
    }

    [WebMethod]
    [ScriptMethod(ResponseFormat = ResponseFormat.Json, UseHttpGet = true, XmlSerializeString = false)]
    public string Load(string e)
    {
        List<Test> post = new List<Test> { new Test("www"), new Test("www1") };
        return JsonConvert.SerializeObject(post);
    }

在js文件中:

 var store = new Ext.data.JsonStore({
        proxy: new Ext.data.HttpProxy({
            url: '/core/webservice/service.asmx/Load',
            method: 'GET',
            headers: { 'Content-type': 'application/json' }
        }),
        root: 'd',
        id: 'Id',
        fields: ['TI']
    });
    store.load({ params: { e: ''} });
    return; 

谢谢。

米尔

【问题讨论】:

  • 我测试了 JSONConvert.Serialize,它运行良好。您可以从代理中删除此行并重试吗: headers: { 'Content-type': 'application/json' }

标签: javascript asp.net json web-services asmx


【解决方案1】:

引号表示这是一个字符串,所以:

var b = {"d":"[{\"TI\":\"www\"},{\"TI\":\"www1\"}]"};

b["d"] 将返回一个字符串而不是对象数组。 您可以在 javascript 中使用以下内容解决此问题:

var c = eval(b["d"]);

这会将字符串转换为对象数组。 或者更好的方法,发布返回 this 的代码,我们可以尝试找出它作为字符串返回的原因。

【讨论】:

    【解决方案2】:

    您不需要在网络服务中手动序列化;考虑改用这样的东西:

    public List<Test> Load(string e)
    {
        List<Test> post = new List<Test> { new Test("www"), new Test("www1") };
        return post;
    }
    

    由于您使用string 作为返回对象,它会在序列化时将其转换为您的返回对象(再次)。

    【讨论】:

      猜你喜欢
      • 2016-10-21
      • 1970-01-01
      • 2011-09-29
      • 2013-01-15
      • 1970-01-01
      • 1970-01-01
      • 2011-04-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多