2010-06-05 88 views
25

如何使用json.net將數據錶轉換爲json?任何建議...我已經下載了必要的二進制文件...我應該使用哪個類來將我的數據錶轉換爲json? 迄今爲止,用這種方法通過將數據表我得到JSON字符串...如何使用json.net將數據錶轉換爲json字符串?

public string GetJSONString(DataTable table) 
    { 
     StringBuilder headStrBuilder = new StringBuilder(table.Columns.Count * 5); //pre-allocate some space, default is 16 bytes 
     for (int i = 0; i < table.Columns.Count; i++) 
     { 
      headStrBuilder.AppendFormat("\"{0}\" : \"{0}{1}¾\",", table.Columns[i].Caption, i); 
     } 
     headStrBuilder.Remove(headStrBuilder.Length - 1, 1); // trim away last , 

     StringBuilder sb = new StringBuilder(table.Rows.Count * 5); //pre-allocate some space 
     sb.Append("{\""); 
     sb.Append(table.TableName); 
     sb.Append("\" : ["); 
     for (int i = 0; i < table.Rows.Count; i++) 
     { 
      string tempStr = headStrBuilder.ToString(); 
      sb.Append("{"); 
      for (int j = 0; j < table.Columns.Count; j++) 
      { 
       table.Rows[i][j] = table.Rows[i][j].ToString().Replace("'", ""); 
       tempStr = tempStr.Replace(table.Columns[j] + j.ToString() + "¾", table.Rows[i][j].ToString()); 
      } 
      sb.Append(tempStr + "},"); 
     } 
     sb.Remove(sb.Length - 1, 1); // trim last , 
     sb.Append("]}"); 
     return sb.ToString(); 
    } 

現在我想用json.net的,但不知道從哪裏開始....

+0

http://stackoverflow.com/questions/451460/datatable-to-json – Oblio 2010-06-05 10:17:37

+0

這裏的教程一步一步轉換數據表到JSON http://codepedia.info/convert-datatable-to-json- in-asp-net-c-sharp/ – 2016-12-07 06:13:59

回答

56
string json = JsonConvert.SerializeObject(table, Formatting.Indented); 

編輯:當然,你不需要縮進格式,但它使它更好,更易讀。

+0

如何使用JQuery迭代生成的Json? – Pascal 2010-12-19 19:51:42

+8

@Pascal聽起來像一個完全不同的問題... – FastTrack 2013-09-03 19:28:45

+0

有沒有辦法將XML分層結構轉換爲DataTable,將其展平? – raffian 2014-06-11 00:47:50

6

也許它可以幫助

原始版本

public static class DataTableToJson 
{ 
    public static JArray ToJson(this System.Data.DataTable source) 
    { 
     JArray result = new JArray(); 
     JObject row; 
     foreach (System.Data.DataRow dr in source.Rows) 
     { 
      row = new JObject(); 
      foreach (System.Data.DataColumn col in source.Columns) 
      { 
       row.Add(col.ColumnName.Trim(), JToken.FromObject(dr[col])); 
      } 
      result.Add(row); 
     } 
     return result; 
    } 
} 

編輯的版本

有一箇中間步驟,因爲我需要有一本字典

public static IEnumerable<Dictionary<string, object>> ToDictionary(this DataTable table) 
{ 
    string[] columns = table.Columns.Cast<DataColumn>().Select(c=>c.ColumnName).ToArray(); 
    IEnumerable<Dictionary<string, object>> result = table.Rows.Cast<DataRow>() 
      .Select(dr => columns.ToDictionary(c => c, c=> dr[c])); 
    return result; 
} 

您可以添加JsonConverter.SerializeObject(result);或其他json序列化程序來獲取json字符串。

這與@Hasan Javaid帖子類似

0

選中此項。

private static string DataTableToJson(DataTable dataTable) 
    { 
     JavaScriptSerializer serializer = new JavaScriptSerializer(); 
     var rows = (from DataRow d in dataTable.Rows 
      select dataTable.Columns.Cast<DataColumn>().ToDictionary(col => col.ColumnName, col => d[col])).ToList(); 

     rows.AddRange(from DataRow d in dataTable.Rows 
      select dataTable.Columns.Cast<DataColumn>().ToDictionary(col => col.ColumnName, col => d[col])); 
     return serializer.Serialize(rows); 
    } 
相關問題