2011-07-15 53 views
0

什麼,我需要做的是加載從我的數據庫 的存儲與數據extjs4創建我的餡餅數據圖表接受這個數據,所以我需要在格式返回我的數據看起來是這樣的:使用JSON.NET序列化JSON數據 - C# - ExtJS的

var data = [{ name: "Low", data1: "20", data2: "54", data3: "63", data4: "12" }, 
{ name: "Moderate", data1: "2", data2: "74", data3: "13", data4: "25" }, 
{ name: "Critical", data1: "42", data2: "17", data3: "3", data4: "20" }, 
{ name: "High", data1: "25", data2: "14", data3: "23", data4: "52"}]; 

所以我嘗試做這在C#與json.net,我創建了一個class.cs,把我的查詢來獲得我需要的數據:

namespace charts 
{ 
public class lineChartClass 
{ 
    public String piedata() 
    {  
{//..my queries in here..//} 
    double[] data = new double[4] ; 
     //data = "{ name: \"Low\", data1: " + lowtotal + "}" + ",{ name: \"Moderate\", data1: " + moderatetotal + "}" + ",{ name: \"Critical\", data1: " + criticaltotal + "}" + ",{ name: \"High\", data1: " + hightotal + "}"; 
     data[0]=lowtotal; 
     data[1] = moderatetotal; 
     data[2] = criticaltotal; 
     data[3] = hightotal; 
     return data; 



    }//eo piedata 
} 
    public class ChartItem 
    { 
     public string Name { get; set; } 

     public string Data1 { get; set; } 


    } 

}

,創造了我的handler.ashx轉換成JSON:

namespace charts { 
public class lineChartData : IHttpHandler 
{ 
    static string ConvertToJson() 
    { 
    List<ChartItem> chartItems = new List<ChartItem>(); 

     chartItems.Add(new ChartItem() { Name = "Low", Data1 = json[0].ToString() }); 
     chartItems.Add(new ChartItem() { Name = "Moderate", Data1 = json[1].ToString() }); 
     chartItems.Add(new ChartItem() { Name = "Critical", Data1 = json[2].ToString() }); 
     chartItems.Add(new ChartItem() { Name = "High", Data1 = json[3].ToString() }); 
     string result = new JavaScriptSerializer().Serialize(chartItems); 
     return result; 

    } 
} 
} 

然後在我chart.js之我這樣稱呼它:

var obj= new lineChartData(); 

window.store1 = Ext.create('Ext.data.JsonStore', { 
fields: ['name', 'dat1', 'data2', 'data3', 'data4'], 
data: obj.ConvertToJson()//generateData() 
}); 

,但我得到這個錯誤

Uncaught ReferenceError: lineChartData is not defined 
lineChartData.ashxGET http://localhost/lineChartData.ashx?proxy 500 (Internal Server Error) 

IM剛開始使用C#和ExtJS的和不知道如何使用json.net

在此先感謝烏拉圭回合時間

+0

代碼'趕上(例外){拋出前; }'是邪惡的:不要捕捉你無法處理或包裝的異常; *從不*重新拋出異常。 –

+0

我添加它後,我得到了錯誤,刪除它dosnt改變任何東西,thx – Armance

+0

它改變了堆棧跟蹤,從而使調試更難。 –

回答

3

爲什麼不要在客戶端和服務器端使用標準版本的JSON序列化工具。 ASP.NET有JavaScriptSerializer類& JavaScript有JSON對象(在ECMAScript 5中是本機的,並且是由Douglas Crockford編寫的用於舊版本的插件)。

要在服務器轉換和對象爲JSON,你可以使用:

string objectJson = new JavaScriptSerializer().Serialize(yourObject); 

要在客戶端序列化對象JSON,你可以使用:

string objectJson = JSON.stringify(yourObject); 

反序列化JSON字符串轉化爲客戶端的對象,您可以使用:

var yourObject = JSON.parse(objectJson); 

因此,您可以有一個類來表示您的圖表在服務器項目:

public class ChartItem 
{ 
    public string Name {get;set;} 

    public string Data1 {get;set;} 

    public string Data2 {get;set;} 

    public string Data3 {get;set;} 

    public string Data4 {get;set;} 
} 

,並用它在你的`ConvertToJson」的方法如下:

List<ChartItem> chartItems = new List<ChartItem>(); 
// add as many item as you wish to this list 
chartItems.Add(new ChartItem(){ Name = "Something", Data1 = "data1", Data2 = "data2", Data3 = "data3", Data4 = "data4 }); 
string result = new JavaScriptSerialize().Serialize(chartItems); 
return result; 
+0

我不介意,我只是需要它來工作的任何可能的方式,如果它更容易和u可以點我怎麼做,將是巨大 – Armance

+0

好,JSON已經存在了多年,數以千計的開發人員都使用過它。所以它的框架在服務器端和客戶端都是完全成熟的。請參閱更新:) –

+0

ok.so我在哪裏添加此代碼?用JavaScriptSerializer()替換converttojson()。Serialize()? PLZ熊與我,總新手在這裏 – Armance

1

你有沒有在你的web.config中添加他們正確:

<httpHandlers> 
    <add verb="GET" path="lineChartData.ashx" type="charts.lineChartData"/> 
</httpHandlers> 
+0

是的,我仍然有錯誤,但 – Armance

+0

任何其他的想法嗎? – Armance