:JSON无法读取Web Service的结果

时间:2014-05-23 09:47:41

标签: asp.net json wcf

我的网络服务方法如下,

[OperationContract]
[WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Json,          BodyStyle = WebMessageBodyStyle.Wrapped, UriTemplate = FetchSitePerformanceAuto/{fromDate}/{country}")]
public List<DailyBingRTT_Performance_Last7Days_Result> FetchSitePerformanceAuto(string fromDate, string country)
{

   SitePerformance objSiteP = new SitePerformance();
   List<DailyBingRTT_Performance_Last7Days_Result> l = new     List<DailyBingRTT_Performance_Last7Days_Result>();
   l = objSiteP.getPerformanceByDateAndCountry(fromDate, country);
   WebOperationContext.Current.OutgoingResponse.Format = WebMessageFormat.Json;
   return l;
}

当我直接在浏览器中调用此方法时,它返回

{"FetchSitePerformanceAutoResult":[{"DailyTimeStamp":"Nov 03, 2013","Performance":106917},{"DailyTimeStamp":"Nov 04, 2013","Performance":119542},{"DailyTimeStamp":"Nov 05, 2013","Performance":106917},{"DailyTimeStamp":"Nov 06, 2013","Performance":119542},{"DailyTimeStamp":"Nov 07, 2013","Performance":106917},{"DailyTimeStamp":"Nov 08, 2013","Performance":119542},{"DailyTimeStamp":"Nov 09, 2013","Performance":106917}]}

但是当我尝试使用以下代码调用此服务方法时,

var newUrl = 'http://someurl:55250/BeingEdgeService.svc/FetchSitePerformanceAuto/11-09-2013/India?'

$.getJSON(newUrl, function (result) {
   alert('Length  ' + result.length);
});

它返回undefined。

此外,我还有一个服务方法

 [OperationContract]
    [WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Json,          BodyStyle = WebMessageBodyStyle.Wrapped, UriTemplate = FetchSitePerformanceAuto/{fromDate}/{country}")]
    public Stream FetchSitePerformanceStream(string fromDate, string country)
            {
                SitePerformance objSiteP = new SitePerformance();
                List<DailyBingRTT_Performance_Last7Days_Result> l = new List<DailyBingRTT_Performance_Last7Days_Result>();
                l = objSiteP.getPerformanceByDateAndCountry(fromDate, country);

                var javaScriptSerializer = new JavaScriptSerializer();
                var json = Encoding.UTF8.GetBytes(javaScriptSerializer.Serialize(l));
                var memoryStream = new MemoryStream(json);
                WebOperationContext.Current.OutgoingResponse.ContentType = "application/json; charset=utf-8";
                return memoryStream;

            }

使用$.getJSON调用此方法时,会返回正确的结果。 我认为问题出在服务方面可能是。

我使用Fiddler执行了我的代码,结果是

{"FetchSitePerformanceAutoResult":[{"DailyTimeStamp":"Nov 01, 2013","Performance":106917},{"DailyTimeStamp":"Nov 02, 2013","Performance":119542}]}

这是一个正确的JSON吗?因为无法解析它。

2 个答案:

答案 0 :(得分:0)

执行此操作后会得到什么:

$.getJSON(newUrl, function (result) {
   alert('Length  ' + result);
});

而不是result.length,只需使用结果变量来查看响应。 由于响应封装在JSON对象中,因此您可以通过访问“result.data”来获取服务器返回的数据。

希望这有帮助。

答案 1 :(得分:0)

$.getJSON(newUrl, function (result) {
   alert('Length  ' + result.length);
});

没有错,反之则不完整。

因为我的JSON将返回对象,我应该这样做,

alert('Length  ' + result.FetchSitePerformanceAutoResult.length);

我通过我的问题下面的评论来看到这一点。