我有一个数据表,我想将其更改为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?
感谢
答案 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
.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);
因此,在您的消费应用中,您必须反序列化回到对象,以查看对象格式。