Как создать ожидаемый источник данных JSON в Google DataTable с помощью C #? - PullRequest
9 голосов
/ 02 марта 2010

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

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
)

Ответы [ 4 ]

8 голосов
/ 04 марта 2010

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

3 голосов
/ 17 июня 2014

Еще один способ добиться этого - использовать Google DataTable .Net Wrapper (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.

1 голос
/ 13 января 2012

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

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

0 голосов
/ 12 октября 2016

Лучший способ создания диаграмм Google с датой 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; }
}
...