【问题标题】:.NET Core API - Convert DataTable to JSON (Deep).NET Core API - 将 DataTable 转换为 JSON(深度)
【发布时间】:2020-06-05 13:24:52
【问题描述】:

我正在我的服务器上执行一个存储过程,它返回一个 DataTable。 DataTable 有一些列,其中包含 JSON 数据。当我将结果返回给客户端时,DataTable 的顶层被正确格式化为 JSON,但带有 JSON 数据的列作为字符串返回。如何在返回客户端之前将整个表(包括带有 JSON 的列)转换为 JSON?

数据表

ColA        ColB         ColC
1           Test         [{"ColD":2,"ColE":"Another Test"}]

我得到了什么

[
  {
    "ColA": 1,
    "ColB": "Test",
    "ColC": "[{\"ColD\":2,\"ColE\":\"Another Test\"}]"
  }
]

我需要什么

[
  {
    "ColA": 1,
    "ColB": "Test",
    "ColC": [
      {
        "ColD": 2,
        "ColE": "Another Test"
      }
    ]
  }
]

【问题讨论】:

标签: c# json asp.net-core datatable json.net


【解决方案1】:

发布问题后我有一个突破。我为DataTable 创建了一个扩展方法,它将DataTable 转换为List<Dictionary<string, object>>。在此过程中,我检查以[{ 开头的值并使用JsonConvert.DeserializeObject 反序列化它们。

public static List<Dictionary<string, object>> ToJson(this DataTable dt)
{
    var list = new List<Dictionary<string, object>>();

    foreach (DataRow row in dt.Rows)
    {
        var dict = new Dictionary<string, object>();

        foreach (DataColumn col in dt.Columns)
        {
            if (row[col].ToString().StartsWith('{') || row[col].ToString().StartsWith('['))
            {
                dict[col.ColumnName] = JsonConvert.DeserializeObject(row[col].ToString());
            }
            else
            {
                dict[col.ColumnName] = row[col];
            }
        }
        list.Add(dict);
    }

    return list;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-13
    • 2017-07-26
    相关资源
    最近更新 更多