尝试使用匿名类型生成自定义 JSON
Trying to generate custom JSON with anonymous types
我最近一直在学习如何从数据表生成 json
和 geojson
流。至少可以说这是一场艰苦的战斗。
目前我正在尝试为图表创建自定义 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());
}
那么你也不需要那些删除最后一个逗号的行。
我最近一直在学习如何从数据表生成 json
和 geojson
流。至少可以说这是一场艰苦的战斗。
目前我正在尝试为图表创建自定义 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());
}
那么你也不需要那些删除最后一个逗号的行。