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 環境に詳しくありませんが、bortosky-google-visualizationという Google Visualization API 用の .NET ヘルパーがあります。System.Data.DataTableライブラリは、オブジェクトから JSON Google DataTable を書き込みます。

于 2010-03-04T09:05:18.297 に答える
3

これを実現するもう 1 つの方法は、Google DataTable .Net ラッパー ( 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 を取得するには、キーを二重引用符で囲みます。)

したがって、実際にはDataContractJsonSerializerorを使用しJavaScriptSerializerて、Google DataTable の JSON を作成できます。ただし、出発点が aSystem.Data.DataTableである場合は、上記の回答に記載されているライブラリを使用する方がおそらく簡単です。

于 2012-01-13T08:27:32.780 に答える
0

C# を使用して Google Charts データテーブルを作成する最良の方法は、データを反復処理し、モデル クラスを埋めて、埋められたモデルを 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 に答える