2010-06-05 2 views
25

Как преобразовать datatable в json с помощью json.net? Любое предложение ... Я загрузил необходимые бинарные файлы ... Какой класс я должен использовать для преобразования моего datatable в json? До сих пор использовали этот метод, чтобы получить JSON строку, передавая мой DataTable ...Как преобразовать datatable в строку json с помощью json.net?

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

+0

вот шаг за шагом учебник для преобразования DataTable в JSON http://codepedia.info/convert-datatable-to-json- in-asp-net-c-sharp/ –

ответ

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

Редактирование. Конечно, вам не требуется форматирование с отступом, но оно делает его приятным и читаемым.

+0

Как перевести полученный Json с JQuery? – Pascal

+8

@ Паскаль, который звучит как целый вопрос ... – FastTrack

+0

Есть ли способ конвертировать XML-иерархию в DataTable, сглаживая его? – raffian

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; 
    } 
} 

Edited Version

Существует промежуточным шагом, потому что мне нужно, чтобы иметь словарь

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 Джавайд размещать

0

Check This.

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); 
    } 
Смежные вопросы