[英]Convert DataTable to JSON
我在这里查看了答案:
但是对于我的特定用例,它们没有帮助。 我正在从SQL数据适配器检索DataTable,并希望将DataTable转换为List(这很容易),然后将List序列化为JSON(使用JSON.net,这很容易)。
问题是我似乎必须使用List。 好的,很好-我有以下代码:
DataTable result = GoMagicallyGatherSomeData();
List<DataRow> ret = new List<DataRow>();
if (result != null && result.Rows.Count > 0)
{
foreach (DataRow curr in result.Rows)
{
ret.Add(curr);
}
}
要么
DataTable result = GoMagicallyGatherSomeData();
List<DataRow> ret = result.AsEnumerable().ToList();
当我序列化列表时,它不是我所期望的。
我想回来的是:
[
{
"TestId":1,
"AccountId":1,
"SomeString":"This is an updated test",
"SomeTimestamp":"2016-01-01T00:00:00Z",
"SomeDecimal":5.55
},
{
"TestId":3,
"AccountId":1,
"SomeString":"This is a third test",
"SomeTimestamp":"2016-01-01T00:00:00Z",
"SomeDecimal":5.55
},
{ ... removed for brevity ... }
]
我真正得到的是:
[
{
"RowError":"",
"RowState":2,
"Table":[
{
"TestId":1,
"AccountId":1,
"SomeString":"This is an updated test",
"SomeTimestamp":"2016-01-01T00:00:00Z",
"SomeDecimal":5.55
},
{
"TestId":3,
"AccountId":1,
"SomeString":"This is a second test",
"SomeTimestamp":"2016-01-01T00:00:00Z",
"SomeDecimal":5.55
},
{ ... removed for brevity ... }
],
"ItemArray":[
1,
1,
"This is an updated test",
"2016-01-01T00:00:00Z",
5.55
],
"HasErrors":false
},
{
"RowError":"",
"RowState":2,
"Table":[
... there seems to be an instance of this for every row in the result ...
],
"ItemArray":[
1,
1,
"This is an updated test",
"2016-01-01T00:00:00Z",
5.55
],
"HasErrors":false
}
]
另一个挑战是我需要在不知道数据实际类型的情况下执行此操作。
有见识吗? 有人对最佳方法提出建议吗? 我可以避免从第一个序列化的DataRow中复制“表”数组,还是随后的序列化DataRows实际上包含与第一个不同的数据?
您可以将DataTable
转换为List<dynamic>
,然后将其转换为json。 例如,转换为动态列表:
public static List<dynamic> ConvertToDataTable(DataTable dataTable)
{
var result = new List<dynamic>();
foreach (DataRow row in dataTable.Rows)
{
dynamic dyn = new ExpandoObject();
foreach (DataColumn column in dataTable.Columns)
{
var dic = (IDictionary<string, object>)dyn;
dic[column.ColumnName] = row[column];
}
result.Add(dyn);
}
return result;
}
你也可以做一个像这样的扩展方法后 。 然后使用它并转换为List<dynamic>
,最后使用Newtonsoft.Json (aka Json.Net)
的JsonConvert
将列表转换为json。 样品:
var list = ConvertToDataTable(dataTable);
var json = JsonConvert.SerializeObject(list);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.