2011-08-20 34 views
2

我有一個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.

回答

1

變化:

myojb = (CategoryDataViewModel)js.Deserialize(objText, typeof(CategoryDataViewModel)); 

到:

myojb = (List<CategoryDataViewModel>)js.Deserialize(objText, typeof(List<CategoryDataViewModel>)); 

和你應該沒事。該陣列將反序列化爲列表沒有問題。

+0

myojb需要重新定義爲List 。 –

+0

該死的我實際上已經嘗試過了,但是我遺漏了ajax部分的一個'result = JSON.stringyfy(data)'錯誤......謝謝! :) – LanFeusT

1

我以前見過類似的事情,我想你可能需要改變MyObj中的列表。

List<CategoryDataViewModel> myObjs = new List<CategoryDataViewModel>(); 
... 
myObjs = js.Deserialize<List<CategoryDataViewModel>>(objText); 
+0

Joey道歉,他先到那裏,但由於某種原因,它沒有提醒我任何答案。 –