我正在使用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]]
水果是动态属性
答案 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。服务器将以特定格式提供数据,并且必须单独处理提供用户友好显示的操作。这种操作既可以在服务器上完成(如果需要另一个客户端也可以轻松删除),也可以在客户端本身完成,从而在一个地方保留客户特定的代码。
我希望这是有道理的。