有关将数据表转换为JSON的问题

时间:2019-02-11 16:30:04

标签: c# datatable

我正在尝试将DataTable转换为JSON文本,但是如果其中一列具有表的数据类型,我会遇到问题。

DataTable TaskDetails = new DataTable(); //subtable
TaskDetails.Columns.Add("taskId", typeof(string));
TaskDetails.Columns.Add("ticketUid", typeof(string));
TaskDetails.Rows.Add(TaskID, TicketUID);

DataTable table = new DataTable(); //main table
table.Columns.Add("operationType", typeof(string));
table.Columns.Add("comment", typeof(string));
table.Columns.Add("tasks", typeof(DataTable));

table.Rows.Add(OperationType,Comment,TaskDetails); //TaskDetails table is added on the main table.

System.Web.Script.Serialization.JavaScriptSerializer serializer = new System.Web.Script.Serialization.JavaScriptSerializer();
List<Dictionary<string, object>> rows = new List<Dictionary<string, object>>();
Dictionary<string, object> row;
foreach (DataRow dr in table.Rows)
{
    row = new Dictionary<string, object>();
    foreach (DataColumn col in table.Columns)
    {
        row.Add(col.ColumnName, dr[col]);
    }
    rows.Add(row);
}
 string response = serializer.Serialize(rows); //I'm getting an error here

错误:System.InvalidOperationException序列化类型为'System.Reflection.RuntimeModule'的对象时检测到循环引用

我期望以Json格式输出字符串。

1 个答案:

答案 0 :(得分:0)

之所以会这样,是因为您有两个互相引用的对象。例如,您无法序列化以下对象“ ClassA”:

ClassA --> ClassB --> ClassA --> ClassB --> ClassA etc.

这被称为“循环依赖”,因为ClassA依赖于ClassB,而ClassB依赖于ClassA。您无法序列化此代码,因为生成的Json将无限长。

因此,您需要使用这些行中的数据来创建自己的不具有这些循环引用的可序列化对象。