2015-03-17 1 views
0

Я пытаюсь преобразовать объект списка C# в правильный формат для диаграммы флота. По какой-то причине я просто не могу сделать это правильно. Я пробовал несколько разных методов. JSON, который я возвращаю, действителен JSON, и список действителен, но по какой-то причине диаграмма Flot хочет получить данные в другом формате. Любая помощь будет оценена по достоинству. Спасибо!Преобразование диаграммы флота C# Javascript/AJAX - Таблица диаграмм

Вот преобразованный C Список для JSON массив

[{"color":"red","data":["Agriculture",0,2]},{"color":"red","data":["Healthcare",0,1]},{"color":"red","data":["Manufacturing",0,0]},{"color":"red","data":["Retail",0,0]},{"color":"red","data":["Information Technology",0,0]}] 

Я использую этот метод, чтобы сделать это #:

$.ajax({ 
      type: "POST", 
      url: "Summary.asmx/getBarChartSeriesData", 
      data: JSON.stringify({ userid: userid }), 
      contentType: "application/json; charset=utf-8", 
      dataType: "json", 
      success: function (response) { 

       barSummaryData = response.d; 
       var jsonArray = JSON.parse(response.d); 
       //this format seems to work 
       //var data = [{ data: [[0, 1]], color: "red" }, { data: [[1, 2]], color: "yellow" }, { data: [[2, 3]], color: "green" }]; 


       var plot = 
       $.plot($('#barSummaryPlaceholder'), jsonArray, { 
        series: { 
         bars: { 
          show: true, 
          barWidth: 0.3, 
          align: "center" 
         } 
        }, 
        xaxis: { 
         ticks: ticks 
        }, 
        grid: { hoverable: true, clickable: true } 
       }); 

      }, 
      failure: function (msg) { 
       $('#barSummaryPlaceholder').text(msg); 
      } 
     }); 

Вот C# метод в ASMX:

public string getSummaryBarChartSeriesData(int userid) 
    { 

     List<Series> SeriesData = new List<Series>(); 

     DataTable dt = new DataTable(); 
     dt.Clear(); 

     dt = chartcode.RetrieveSummaryBarChartData(userid); 
     int countOfRows = 0; 

     foreach (DataRow row in dt.Rows) 
     { 
      List<object> objData = new List<object>(); 
      objData.Add(row["Name"].ToString()); 
      objData.Add(countOfRows); 
      objData.Add(Convert.ToInt32(row["CountOfStudents"])); 

      SeriesData.Add(
      new CareerClusterSeries 
      { 
       data = objData, 
       color = "red" 
      }); 

     } 

     var jsonSerialiser = new JavaScriptSerializer(); 
     var json = jsonSerialiser.Serialize(SeriesData); 
     return json; 
    } 

По какой-то причине строка C# json находится в допустимом формате для самого JSON, но НЕ правильный формат для диаграмм Флота, которые я s система диаграммы, которую я пытаюсь использовать.

ответ

1

Во-первых, из документации Flot Reference: Data Format, то data поле должно быть массивом массивов чисел, например:

{ 
    label: "y = 3", 
    data: [[0, 3], [10, 3]] 
} 

В отличие от этого, у вас есть плоский массив чисел со строкой смешанной в: {"data":["Agriculture",0,2], "color":"red",}. Какова цель строки - это ярлык серии?

Вы затем забыли прирастать countOfRows? Он всегда равен нулю в вашем коде.

Предполагая, что вы хотите, чтобы увеличить количество и установить row["Name"] быть ярлык серии, следующий должен производить JSON, что соответствует с API:

public class Series 
{ 
    public string color { get; set; } 
    public List<IList<double>> data { get; set; } 
    public string label { get; set; } 
} 

А потом:

public string getSummaryBarChartSeriesData(int userid) 
    { 
     var SeriesData = new List<Series>(); 

     DataTable dt = chartcode.RetrieveSummaryBarChartData(userid); 

     int countOfRows = 0; 
     foreach (DataRow row in dt.Rows) 
     { 
      var rawData = new List<IList<double>>(); 
      rawData.Add(new double[] { countOfRows++, Convert.ToInt32(row["CountOfStudents"]) }); 
      //objData.Add(row["Name"].ToString()); 

      SeriesData.Add(
      new CareerClusterSeries 
      { 
       data = rawData, 
       color = "red", 
       label = row["Name"].ToString(), // Guessing you wanted this. 
      }); 
     } 

     var jsonSerialiser = new JavaScriptSerializer(); 
     var json = jsonSerialiser.Serialize(SeriesData); 
     return json; 
    } 
Смежные вопросы