Как преобразовать datatable в строку json с помощью json.net?

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

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, но не знаю, с чего начать …

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

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

Может быть, это может помочь

Оригинальная версия

 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> ToDictionary(this DataTable table) { string[] columns = table.Columns.Cast().Select(c=>c.ColumnName).ToArray(); IEnumerable> result = table.Rows.Cast() .Select(dr => columns.ToDictionary(c => c, c=> dr[c])); return result; } 

Вы можете добавить JsonConverter.SerializeObject(result); , или другой сериализатор json, чтобы получить строку json.

Это похоже на сообщение @Hasan Javaid

Проверь это.

  private static string DataTableToJson(DataTable dataTable) { JavaScriptSerializer serializer = new JavaScriptSerializer(); var rows = (from DataRow d in dataTable.Rows select dataTable.Columns.Cast().ToDictionary(col => col.ColumnName, col => d[col])).ToList(); rows.AddRange(from DataRow d in dataTable.Rows select dataTable.Columns.Cast().ToDictionary(col => col.ColumnName, col => d[col])); return serializer.Serialize(rows); } 
  • Удаление десериализации полиморфных classов json без информации о типе с использованием json.net
  • Как использовать Json.NET для JSON-моделирования в проекте MVC5?
  • Как десериализовать JSON с двойными именами свойств в одном и том же объекте
  • Json.NET (Newtonsoft.Json) - Два «свойства» с таким же именем?
  • JSON.NET Parser * кажется * будет двойной сериализацией моих объектов
  • Удалить дескриптор объекта json в динамический объект с помощью Json.net
  • Как я могу вернуть CamelCase JSON, сериализованный JSON.NET из методов controllerа ASP.NET MVC?
  • Сериализация / десериализация пользовательской коллекции с дополнительными свойствами с помощью Json.Net
  • Преобразовать Newtonsoft.Json.Linq.JArray в список определенного типа объекта
  • Конвенция о присвоении имен JSON
  • Как изменить имена свойств при сериализации с помощью Json.net?
  • Давайте будем гением компьютера.