c#从字符串返回json对象

时间:2014-04-10 12:59:24

标签: c# jquery asp.net json json.net

我有一个数据表,我想将其更改为json。我是这样使用json.net lib做的那样

    [WebMethod]
    [ScriptMethod(UseHttpGet = true)]
    public object LoadTotalCallsPerCampignByRangeFilter(string fromDate, string toDate)
            DataTable DTgraph = new DataTable();
            ....
            .... 
            string jsonformatstring = JsonConvert.SerializeObject(DTgraph, Formatting.Indented);
            return jsonformatstring;

这是一个网络服务

然后我试图从这样的jquery中获取它:

 $.getJSON('http://localhost:4025/vmp_webservice.asmx/LoadTotalCallsPerCampignByRangeFilter',
               { fromDate: "01-01-2014", toDate: "09-04-2014" } )
                .done(function (result) {
                    alert("hi");
            });

我检查了chrome调试工具(f12),我可以看到请求和返回的数据,但是警报功能永远不会被触发。

这是返回的数据。

<?xml version="1.0" encoding="utf-8"?>
<string xmlns="http://tempuri.org/">[
  {
    "Campaign": "default",
    "TotalInBound": 216.0
  },
  {
    "Campaign": "direct",
    "TotalInBound": 10.0
  },
  {
    "Campaign": "Sales",
    "TotalInBound": 151.0
  },
  {
    "Campaign": "Support",
    "TotalInBound": 2.0
  }
]</string>

我发现问题在于我的网络服务正在返回string formated而不是json object

那么如何才能返回对象json而不是字符串格式化json?

如果问题是别的,请告诉我

感谢

3 个答案:

答案 0 :(得分:3)

如果您希望将自己的回复视为JSON,则需要set your ContentType

HttpContext.Current.Response.Clear();
HttpContext.Current.Response.ContentType = "application/json; charset=utf-8";
HttpContext.Current.Response.Write(jsonformatstring);
HttpContext.Current.Response.End();

答案 1 :(得分:1)

尝试使用done,always和fail方法进行调试。我的猜测是它试图将字符串解析为JSON并失败。您可以使用alert

替换下面的console.log
  .done(function() {
    console.log( "second success" );
  })
  .fail(function( jqxhr, textStatus, error ) {
    console.log( error );
  })
  .always(function() {
    console.log( "complete" );
  });

答案 2 :(得分:0)

Webservise将返回字符串,因为在返回语句之前,您要序列化为字符串并发送给客户端。

string jsonformatstring = JsonConvert.SerializeObject(DTgraph, Formatting.Indented);

因此,在您的消费应用中,您必须反序列化回到对象,以查看对象格式。

https://api.jquery.com/jQuery.parseJSON/