【问题标题】:Convert SQLDataReader results to JSON, with nested JSON objects使用嵌套的 JSON 对象将 SQLDataReader 结果转换为 JSON
【发布时间】:2017-08-23 21:47:11
【问题描述】:

我有一个 C# 应用程序,它检索以下格式的 SQL 结果集:

customer_id     date_registered     date_last_purchase      loyalty_points
1               2017-01-01          2017-05-02              51
2               2017-01-23          2017-06-21              124
...

如何将其转换为 JSON 字符串,以便第一列 (customer_id) 是键,而所有其他后续列是每个客户 ID 的嵌套 JSON 对象中的值?

例子:

{
        1: {
            date_registered: '2017-01-01',
            date_last_purchase: '2017-05-02',
            loyalty_points: 51,
            ...
        },
        2: {
            date_registered: '2017-01-23',
            date_last_purchase: '2017-06-21',
            loyalty_points: 124,
            ...
        },
        ...
}

除了date_registereddate_last_purchaseloyalty_points之外,以后可能还会有其他的列,所以我不想专门提到这些列名。因此,我已经使用下面的代码来获取列名,但在此之后被卡住了。

SqlDataReader sqlDataReader = sqlCommand.ExecuteReader();

var columns = new List<string>();

for (var i = 0; i < sqlDataReader.FieldCount; i++)
{
    columns.Add(sqlDataReader.GetName(i));
}

while (sqlDataReader.Read())
{
    rows.Add(columns.ToDictionary(column => column, column => sqlDataReader[column]));
}

【问题讨论】:

  • How can I convert this to a JSON string 我没有看到您的问题有任何实现这一目标的尝试。

标签: c# sql sql-server json sqldatareader


【解决方案1】:

您可以使用类似的方法将数据读取器转换为 Dictionary&lt;object, Dictionary&lt;string, object&gt;&gt;,然后使用 Json.NET 将其转换为 JSON:

var items = new Dictionary<object, Dictionary<string, object>>();
while (sqlDataReader.Read())
{
    var item = new Dictionary<string, object>(sqlDataReader.FieldCount - 1);
    for (var i = 1; i < sqlDataReader.FieldCount; i++)
    {
        item[sqlDataReader.GetName(i)] = sqlDataReader.GetValue(i);
    }
    items[sqlDataReader.GetValue(0)] = item;
}
var json = Newtonsoft.Json.JsonConvert.SerializeObject(items, Newtonsoft.Json.Formatting.Indented);

更新: JSON“名称”始终是字符串,因此使用 objectGetValue 作为键。

【讨论】:

    猜你喜欢
    • 2019-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-02
    • 2014-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多