9

如何使用 C#创建google.visualization.datatable预期的 JSON 源?显然使用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

4 回答 4

8

虽然我不熟悉 .NET 环境,但有一个用于 Google Visualization API 的 .NET 助手,称为bortosky-google-visualizationSystem.Data.DataTable该库从一个对象写入一个 JSON Google DataTable 。

于 2010-03-04T09:05:18.297 回答
3

实现此目的的另一种方法是使用 Google DataTable .Net Wrapper ( https://googledatatablelib.codeplex.com/ ),它可以使用强类型 System.DataTable,然后可以将其转换为 google.datatable 可视化JSON 格式。

此服务器端代码

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 控制器中使用。

于 2014-06-16T20:13:16.727 回答
1

上面示例中预期的 JSON 不是 JSON,而是 Javascript 对象文字。JSON 只是 Javascript 对象文字表示法的一个子集,但如果 Google DataTable 使用外观相似的 JSON 进行初始化,则上面的示例应该(并且确实)也可以工作。(要获得正确的 JSON,只需在键周围加上双引号。)

所以实际上您可以使用DataContractJsonSerializerorJavaScriptSerializer为 Google DataTable 构造 JSON。但是,如果您的起点是 a System.Data.DataTable,那么使用上面答案中提到的库可能更容易。

于 2012-01-13T08:27:32.780 回答
0

通过 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; }
}
于 2016-10-12T03:41:49.053 回答