2010-06-05 19 views
25

Cómo convertir datatable a json usando json.net? Cualquier sugerencia ... He descargado los archivos binarios necesarios ... ¿Qué clase debo usar para obtener la conversión de mi datatable a json? Hasta ahora se utiliza este método para obtener cadena JSON pasando mi tabla de datos ...¿Cómo convertir datatable a json string usando 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(); 
    } 

Ahora i pensado en utilizar json.net pero no saben por dónde empezar ....

+0

http://stackoverflow.com/questions/451460/datatable-to-json – Oblio

+0

aquí está tutorial paso a paso para convertir tabla de datos a JSON http://codepedia.info/convert-datatable-to-json- in-asp-net-c-sharp/ –

Respuesta

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

Editar: no es necesario formatear con sangría, por supuesto, pero lo hace agradable y legible.

+0

¿Cómo puedo iterar el Json resultante con JQuery? – Pascal

+8

@Pascal que suena como una pregunta completamente diferente ... – FastTrack

+0

¿Hay alguna manera de convertir XML hierarchical a DataTable, aplanándolo? – raffian

6

Tal vez podría ayudar a

versión original

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

Hay un paso intermedio, ya que necesitaba tener un diccionario

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

Puede agregar JsonConverter.SerializeObject(result); u otro serializador json para obtener la cadena json.

Esto es similar a @Hasan Javaid publicar

0

revisar esto.

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); 
    } 
Cuestiones relacionadas