尝试使用匿名类型生成自定义 JSON

Trying to generate custom JSON with anonymous types

我最近一直在学习如何从数据表生成 jsongeojson 流。至少可以说这是一场艰苦的战斗。

目前我正在尝试为图表创建自定义 JSON 流。这是正确的 JSON 格式:

{
    "labels": ["January","February","March","April"],
    "datasets": 
    [{
        "label": "NAME",
        "data": [1,2,3,4]
    },{
        "label": "NUM",
        "data": [11,12,13,14]
    }]
}

我的数据表如下所示:

monthname   Data1   Data2
January     1       11
February    2       12
March       3       13
April       4       14  

到目前为止,这是我所拥有的:

public static string DataTableToCustomJSONString(DataTable dataTable)
{

    string monthName = string.Empty;
    string data1 = string.Empty;
    string data2 = string.Empty;
    foreach (DataRow row in dataTable.Rows)
    {
        monthName += row["MonthName"].ToString() + ",";
        data1 += row["data1"].ToString() + ",";
        data2 += row["data2"].ToString() + ",";
    }
    monthName = monthName.Remove(monthName.Length - 1);
    data1 = data1.Remove(data1.Length - 1);
    data2 = data2.Remove(data2.Length - 1);

    var obj = new
    {
        labels = monthName,
        datasets = new dynamic [] {
        new { label = "NAME", Data = data1 }
        ,
        new { label = "NUM", Data = data2 },
    }
    };
    return JsonConvert.SerializeObject(obj, Formatting.Indented);

}

其中returns以下json:

{
  "labels": "January,February,March,April",
  "datasets": [
    {
      "label": "NAME",
      "data": "1,2,3,4"
    },
    {
      "label": "NUM",
      "data": "11,12,13,14"
    }
  ]
}

如您所见,月份应该用方括号括起来,每个月份都有双引号(["January","February","March","April"] 而不是 "January,February,March,April")。

此外,data 属性 应该看起来像这样 [2,3,4,5],但被 双引号 括起来(`"11 ,12,13,14"``).

此外,我不确定遍历数据表是否是生成月份字符串的最佳方式。

感谢任何帮助。

当你这样做时:

monthName += row["MonthName"].ToString() + ",";

你告诉它把值连接成一个长字符串,中间用逗号分隔。这正是它为您所做的。

如果你希望它是一个数组,你可以使用 List<string> 并添加每个值。它们将被序列化为一个 JSON 数组:

var months = new List<string>();
var data1 = new List<string>();
var data2 = new List<string>();
foreach (DataRow row in dataTable.Rows)
{
    months.Add(row["MonthName"].ToString());
    data1.Add(row["data1"].ToString());
    data2.Add(row["data2"].ToString());
}

那么你也不需要那些删除最后一个逗号的行。