DataTable. DataTable转换为JSON对象. 我通过调用来使用此代码:
string result = JsonConvert.SerializeObject(DatatableToDictionary(queryResult, "Title"), Newtonsoft.Json.Formatting.Indented);
Run Code Online (Sandbox Code Playgroud)
要将DataTable转换为JSON,它可以正常工作并返回以下内容:
{
"1": {
"viewCount": 703,
"clickCount": 98
},
"2": {
"viewCount": 509,
"clickCount": 85
},
"3": {
"viewCount": 578,
"clickCount": 86
},
"4": {
"viewCount": 737,
"clickCount": 108
},
"5": {
"viewCount": 769,
"clickCount": 130
}
}
Run Code Online (Sandbox Code Playgroud)
但我希望它返回以下内容:
{"records":[
{
"Title": 1,
"viewCount": 703,
"clickCount": 98
},
{
"Title": 2,
"viewCount": 509,
"clickCount": 85
},
{
"Title": 3,
"viewCount": 578,
"clickCount": 86
}, …Run Code Online (Sandbox Code Playgroud) 我最近需要将数据表序列化为JSON.我在哪里我们仍然在.Net 2.0,所以我不能在.Net 3.5中使用JSON序列化器.我想这一定是有人做过,所以我去网上找,并发现了一个数量的不同 选项.其中一些依赖于一个额外的库,我很难在这里推进.其他人需要先转换List<Dictionary<>>,这似乎有点尴尬和不必要.另一个处理所有值,如字符串.出于某种原因,我无法真正落后于他们,所以我决定推出自己的,我发布在下面.
正如您从阅读//TODO评论中看到的那样,它在一些地方是不完整的.这段代码已经在生产中,所以它在基本意义上"起作用".它不完整的地方是我们知道我们的生产数据当前不会命中它的地方(数据库中没有时间跨度或字节数组).我在这里发帖的原因是我觉得这可能会更好一些,我希望能帮助完成和改进这段代码.欢迎任何投入.
请注意,此功能内置于.Net 3.5及更高版本中,因此今天使用此代码的唯一原因是,您仍然只能使用.Net 2.0.即便如此,JSON.Net已成为此类事物的goto库.
public static class JSONHelper
{
public static string FromDataTable(DataTable dt)
{
string rowDelimiter = "";
StringBuilder result = new StringBuilder("[");
foreach (DataRow row in dt.Rows)
{
result.Append(rowDelimiter);
result.Append(FromDataRow(row));
rowDelimiter = ",";
}
result.Append("]");
return result.ToString();
}
public static string FromDataRow(DataRow row)
{
DataColumnCollection cols = row.Table.Columns;
string colDelimiter = "";
StringBuilder result = new StringBuilder("{");
for (int i = 0; i < …Run Code Online (Sandbox Code Playgroud)