简体   繁体   English

使用 JSON.NET 序列化 JSON 数据 - c# - ZB927210EF16B43940B8CAZF73E1153

[英]Use JSON.NET to serialize JSON data - c# - extjs

what i need to do is load my pie data chart created with extjs4 with data from my database the store accept this data,so i need to return my data in format that look like this:我需要做的是用我的数据库中的数据加载我用 extjs4 创建的饼图数据图表,商店接受这些数据,所以我需要以如下格式返回我的数据:

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"}];

so im trying to do this in c# with json.net, i created a class.cs and put my queries to get the data i need:所以我试图在 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; }


    }

} }

and created my handler.ashx to convert to json:并创建了我的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;

    }
} 
}

then in my chart.js i call it like this:然后在我的chart.js我这样称呼它:

var obj= new lineChartData();

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

but i get this error :但我收到此错误

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

im just starting with c# and extjs and dont know how to use json.net我刚从 c# 和 extjs 开始,不知道如何使用 json.net

thanks in advance for ur time提前感谢您的时间

Why don't you use standard versions of JSON serialization tools at both client-side and server-side.为什么不在客户端和服务器端都使用标准版本的 JSON 序列化工具。 ASP.NET has JavaScriptSerializer class & JavaScript has JSON object (native in ECMAScript 5 and a plugin for older versions, written by Douglas Crockford). ASP.NET has JavaScriptSerializer class & JavaScript has JSON object (native in ECMAScript 5 and a plugin for older versions, written by Douglas Crockford).

To convert and Object to JSON at server, you can use:要在服务器上将 Object 转换为 JSON,您可以使用:

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

To serialize object to JSON at client-side, you can use:要在客户端将 object 序列化为 JSON,您可以使用:

string objectJson = JSON.stringify(yourObject);

To deserialize a JSON string into an object in client-side, you can use:要在客户端将 JSON 字符串反序列化为 object,您可以使用:

var yourObject = JSON.parse(objectJson);

Thus you can have a class to represent your chart item at server:因此,您可以在服务器上使用 class 来表示您的图表项目:

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;}
}

and use it in your `ConvertToJson' method as follow:并在您的“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;

Have you added them in your web.config properly:您是否将它们正确添加到 web.config 中:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM