在c#中为多个系列图表创建数据结构

时间:2018-05-02 08:16:34

标签: c# json dynamic chart.js chartkick

我正在使用chartkick.js(后者又使用chartjs),我想在C#中为多系列图创建数据结构,它看起来像这个json对象:

series = [
  {name: "User1", data: {"bananas": 3, "Apples": 4}},
  {name: "User2", data: {"bananas": 5, "Apples": 3}}
]

请注意,在chartkick中,数组数组的工作方式如下:

[["bananas", 3], ["Apples", 4]]

我有一个班级来存储每个用户的数据:

public class GenericChartJsSeriesModel : ReportDataModel
{
    public string Name { get; set; }
    public ????? Data { get; set; }
}

我已经尝试了很多,包括:

Dictionary<string, int> //[{["bananas", 1]},{["appels", 1]}]
List<KeyValuePair<string, int>> //{ key: "bananas", value: 1}
string[][] //<- wont work because the values must be numeric

所以问题基本上是:如何创建

{"bananas": 3, "Apples": 4}

或者

[["bananas", 3], ["Apples", 4]]

水果是动态属性

1 个答案:

答案 0 :(得分:1)

也许不是答案(假设使用NewtonsoftJSON)。

实施自定义ContractResolver会为您排序。您可以遍历该属性并根据需要构建JSON。有一个问题已经展示了如何实现自定义解析器。你可以找到它here

该课程可能看起来像这样:

class Sample
{
    public string Name { get; set; }

    public Collection<DataClass> Data { get; set; }
}

public class DataClass
{
    public string AttributeName { get; set; }

    public int Value { get; set; }
}

就我而言,理由就是分离关注。服务器端代码不应该真正担心客户端控制如何需要数据。特别是如果您正在编写可能会或可能不会被多个客户端类型使用的API。服务器将以特定格式提供数据,并且必须单独处理提供用户友好显示的操作。这种操作既可以在服务器上完成(如果需要另一个客户端也可以轻松删除),也可以在客户端本身完成,从而在一个地方保留客户特定的代码。

我希望这是有道理的。