2010-03-02 8 views
8

Как я могу создать источник JSON, ожидаемый google.visualization.datatable с использованием C#? Очевидно, используя JavaScriptSerializer это может быть и речи, так как ожидаемый JSON имеет странную структуру, как описано в документации:Как создать ожидаемый источник JSON для Google DataTable с помощью C#?

var dt = new google.visualization.DataTable(
    { 
     cols: [{id: 'task', label: 'Task', type: 'string'}, 
       {id: 'hours', label: 'Hours per Day', type: 'number'}], 
     rows: [{c:[{v: 'Work'}, {v: 11}]}, 
       {c:[{v: 'Eat'}, {v: 2}]}, 
       {c:[{v: 'Commute'}, {v: 2}]}, 
       {c:[{v: 'Watch TV'}, {v:2}]}, 
       {c:[{v: 'Sleep'}, {v:7, f:'7.000'}]} 
      ] 
    }, 
    0.6 
) 

ответ

8

Хотя я не знаком в среде .NET, есть .NET помощник для API визуализации Google - bortosky-google-visualization. Библиотека записывает JSON Google DataTable из объекта System.Data.DataTable.

+0

Именно то, что я искал. Большое спасибо. –

+1

Не полезно для Asp.net MVC Razor. Также я не использую ADO.NET. – RohannG

1

Ожидаемый JSON в примере выше не JSON, а буква Javascript. JSON - это только подмножество буквенной нотации объекта Javascript, но пример выше должен (и работает) также работать, если Google DataTable инициализируется аналогичным JSON-похожим. (Чтобы получить правильный JSON, просто введите двойные кавычки вокруг клавиш.)

Так что вы можете использовать DataContractJsonSerializer или JavaScriptSerializer для построения JSON для Google DataTable. Однако, если вашей отправной точкой является System.Data.DataTable, то, вероятно, проще использовать библиотеку, указанную в ответе выше.

2

Другим способом достижения этой цели является использование DataTable. Data Wableer (https://googledatatablelib.codeplex.com/), который дает возможность работать с строго типизированным System.DataTable, который затем может быть преобразован в формат JSON в формате google.datatable.

Этот сервер код на стороне

public string GetStatisticsForChart(string messageCode) 
{ 
    //some repository that returns data.... 
    var data = _statisticsRepository.GetPerMessage(messageCode); 

    //It simply returns a list of objects with Year and Count properties. 
    var query = (from t in data 
       group t by new {t.TimeStamp.Year} 
       into grp 
       select new 
        { 
         grp.Key.Year, 
         Count = grp.Count() 
        }).ToList(); 

    //let's instantiate the DataTable. 
    var dt = new Google.DataTable.Net.Wrapper.DataTable(); 
    dt.AddColumn(new Column(ColumnType.String, "Year", "Year")); 
    dt.AddColumn(new Column(ColumnType.Number, "Count", "Count")); 

    foreach (var item in query) 
    { 
     Row r = dt.NewRow(); 
     r.AddCellRange(new Cell[] 
     { 
      new Cell(item.Year), 
      new Cell(item.Count) 
     }); 
     dt.AddRow(r); 
    } 

//Let's create a Json string as expected by the Google Charts API. 
return dt.GetJson(); 
} 

будет генерировать следующий вывод JSON

{ 
    "cols": [ 
      {"type": "string", "id": "Year", "label": "Year"}, 
      {"type": "number", "id": "Count", "label": "Count"} 
     ], 
    "rows": [ 
      {"c": [{"v": "2011"}, {"v": "1860"}]}, 
      {"c": [{"v": "2012"}, {"v": "2000"}]} 
     ] 
} 

, и это может быть использован либо в ASP.Net WebAPI или непосредственно в контроллере ASP.NET MVC.

0

Лучший способ создать Google диаграмму DataTable с помощью C# является итерация данных и заполнить класс модели и вернуть заполненную модель как JSON, здесь модельное представление: -

public class GChartsDataTbl 
{ 
    public List<Col> cols { get; set; } 
    public List<Row> rows { get; set; } 
} 
public class Col 
{ 
    public string id { get; set; } 
    public string type { get; set; } 
} 

public class C 
{ 
    public string v { get; set; } 
    public object f { get; set; } 
} 

public class Row 
{ 
    public List<C> c { get; set; } 
}