我有一个Ajax调用(对于HighChartsDB图表)调用Web服务的WebForm应用程序,它使用WebRequest
在另一个返回JsonResult的应用程序中调用MVC操作。反序列化JSON字符串从MVC行动到C#类
我设法将数据传回给Ajax调用,但我找回数据不会被解析为JSON对象,但只是一个字符串。
我的班:由highcharts称为
public class CategoryDataViewModel
{
public string name { get; set; }
public List<int> data { get; set; }
public double pointStart { get; set; }
public int pointInterval { get { return 86400000; } }
}
我AJAX功能:
function getBugs(mileId) {
var results;
$.ajax({
type: 'GET',
url: 'Services/WebService.svc/GetData',
contentType: "application/json; charset=utf-8",
async: false,
data: { "mileId": parseInt(mileId) },
dataType: "json",
success: function (data) {
console.log(data);
results = data;
}
});
return results;
}
最后我的WebService
public class WebService : IWebService
{
public string GetData(int mileId)
{
string url = "http://localhost:63418/Home/GetWoWData?mileId=" + mileId;
WebRequest wr = WebRequest.Create(url);
using (var response= (HttpWebResponse)wr.GetResponse())
{
using (var reader = new StreamReader(response.GetResponseStream()))
{
var objText = reader.ReadToEnd();
return objText;
}
}
}
}
有了这个,当我CONSOLE.LOG(数据)在阿贾克斯电话我得到:
[{\"name\":\"Sedan\",\"data\":[30,30,30,30,35],\"pointStart\":1307836800000,\"pointInterval\":86400000},{\"name\":\"Low\",\"data\":[800,800,800,826,1694],\"pointStart\":1307836800000,\"pointInterval\":86400000},{\"name\":\"Medium\",\"data\":[180,180,180,186,317],\"pointStart\":1307836800000,\"pointInterval\":86400000},{\"name\":\"High\",\"data\":[29,29,29,34,73],\"pointStart\":1307836800000,\"pointInterval\":86400000},{\"name\":\"Truck\",\"data\":[6,6,6,6,13],\"pointStart\":1307836800000,\"pointInterval\":86400000},{\"name\":\"SUV\",\"data\":[-172,-172,-172,-179,-239],\"pointStart\":1307836800000,\"pointInterval\":86400000},{\"name\":\"Convertible\",\"data\":[0,0,0,0,-404],\"pointStart\":1307836800000,\"pointInterval\":86400000},{\"name\":\"Limo\",\"data\":[-7,-7,-7,-8,-214],\"pointStart\":1307836800000,\"pointInterval\":86400000}]
我似乎无法设法返回到适当的Json对象。我试着在我的web服务与此将其转换回我CategoryDataViewModel:
var myojb = new CategoryDataViewModel();
using (var response = (HttpWebResponse)wr.GetResponse())
{
using (var reader = new StreamReader(response .GetResponseStream()))
{
JavaScriptSerializer js = new JavaScriptSerializer();
var objText = reader.ReadToEnd();
myojb = (CategoryDataViewModel)js.Deserialize(objText, typeof(CategoryDataViewModel));
}
}
return myojb;
但后来我得到Type 'Test.CategoryDataViewModel' is not supported for deserialization of an array.
myojb需要重新定义为List。 –
该死的我实际上已经尝试过了,但是我遗漏了ajax部分的一个'result = JSON.stringyfy(data)'错误......谢谢! :) – LanFeusT