在 C# 中使用 Javascript 序列化器将 DataTable 嵌套到 JSON

DataTable to nested JSON using Javascript serializer in C#

我正在将数据 Table 行转换为 JSON 字符串。使用 Javascript 序列化程序,我生成了一个正常的 JSON 字符串。我们如何将其生成为嵌套字符串。

当前Json输出

{  
   "PatientId":"32424",
   "CustomerId":"XXXX",
   "Name":"DiastolicBloodPressure",
   "Value":89,
   "Unit":"mmHg",
   "MinValue":50,
   "MaxValue":90,
   "SessionElementResponseText":null
}

预计

{  
   "PatientId":"32424",
   "CustomerId":"XXXX",
   "VitalThreshold":{  
      "Name":"DiastolicBloodPressure",
      "Value":89,
      "Unit":"mmHg",
      "MinValue":50,
      "MaxValue":90
   },
   "SessionElementResponseText":null
}

代码

public static string DataTableToJSON(DataTable table)
{
    JavaScriptSerializer serializer = new 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)
        {
            if(col.ColumnName.Equals("Name"))
            {
                //Trying here
            }
            row.Add(col.ColumnName, dr[col]);
        }
        rows.Add(row);
    }
    serializer.MaxJsonLength = int.MaxValue;
    return serializer.Serialize(rows);
}
public static string DataTableToJSON(DataTable table)
{
    JavaScriptSerializer serializer = new JavaScriptSerializer();
    List<Dictionary<string, object>> rows = new List<Dictionary<string, object>>();
    string[] keys = new string[] { "Name", "Value", "Unit", "MinValue", "MaxValue" };
    foreach(DataRow dr in table.Rows)
    {
        Dictionary<string, object> row = new Dictionary<string, object>();
        Dictionary<string, object> dict = new Dictionary<string, object>();
        foreach(DataColumn col in table.Columns)
        {
            if(keys.Contains(col.ColumnName)) dict.Add(col.ColumnName, dr[col]);
            else row.Add(col.ColumnName, dr[col]);
        }
        row.Add("VitalThreshold", dict);
        rows.Add(row);
    }
    serializer.MaxJsonLength = int.MaxValue;
    return serializer.Serialize(rows);
}

基本上,你必须添加一个条件来缓冲内行。然后,在循环结束时将 "inner row" 添加到主行中。

    public static string DataTableToJSON(DataTable table)
    {
        JavaScriptSerializer serializer = new JavaScriptSerializer();
        List<Dictionary<string, object>> rows = new List<Dictionary<string, object>>();
        Dictionary<string, object> row;
        var innerList = new string[] { "Name", "Value", "Unit", "MinValue", "MaxValue" };
        var innerRow = new Dictionary<string, object>();
        foreach (DataRow dr in table.Rows)
        {
            row = new Dictionary<string, object>();
            foreach (DataColumn col in table.Columns)
            {
                if (innerList.Contains(col.ColumnName))
                {
                    innerRow.Add(col.ColumnName, dr[col]);
                }
                else
                {
                    row.Add(col.ColumnName, dr[col]);
                }

            }
            row.Add("VitalThreshold", innerRow);
            rows.Add(row);
        }
        serializer.MaxJsonLength = int.MaxValue;
        return serializer.Serialize(rows);
    }