En muchas ocasiones, cuando estamos generando un servicio web, necesitamos generar un String JSON con un DataSet.
Si lo generamos utilizando como fuente en DataSet tipado generado con ADO.NET, nos va a generar unos códigos que en la app móvil nos va a generar problemas. Para evitarlo vamos a ver un método que realizará la conversión del DataSet tipado a un DataSet estándar.
Previamente, tenemos que tener instalado en nuestro Visual Studio las librerías de http://www.newtonsoft.com/json
Necesitamos incluir las siguientes librerías:
using System.Data;
using Newtonsoft.Json;
using Newtonsoft.Json;
Y el código del método es el siguiente:
public static String GetDSJSon(System.Data.DataTable tabla_origen, String nombre)
{
DataSet dsGenerado = new DataSet(“dataSet”);
dsGenerado.Namespace = “NetFrameWork”;
DataTable tabla = new DataTable();
tabla.TableName = nombre;
for (int i=0;i< tabla_origen.Columns.Count;i++)
{
DataColumn columna = new DataColumn(tabla_origen.Columns[i].ColumnName, tabla_origen.Columns[i].DataType);
tabla.Columns.Add(columna);
}
dsGenerado.Tables.Add(tabla);
for (int i = 0; i < tabla_origen.Rows.Count; i++)
{
DataRow newRow = tabla.NewRow();
for (int j =0;j< tabla_origen.Columns.Count;j++)
{
newRow[tabla_origen.Columns[j].ColumnName] = tabla_origen.Rows[i][j];
}
tabla.Rows.Add(newRow);
}
dsGenerado.AcceptChanges();
string json = JsonConvert.SerializeObject(dsGenerado, Formatting.Indented);
return json;
}
{
DataSet dsGenerado = new DataSet(“dataSet”);
dsGenerado.Namespace = “NetFrameWork”;
DataTable tabla = new DataTable();
tabla.TableName = nombre;
for (int i=0;i< tabla_origen.Columns.Count;i++)
{
DataColumn columna = new DataColumn(tabla_origen.Columns[i].ColumnName, tabla_origen.Columns[i].DataType);
tabla.Columns.Add(columna);
}
dsGenerado.Tables.Add(tabla);
for (int i = 0; i < tabla_origen.Rows.Count; i++)
{
DataRow newRow = tabla.NewRow();
for (int j =0;j< tabla_origen.Columns.Count;j++)
{
newRow[tabla_origen.Columns[j].ColumnName] = tabla_origen.Rows[i][j];
}
tabla.Rows.Add(newRow);
}
dsGenerado.AcceptChanges();
string json = JsonConvert.SerializeObject(dsGenerado, Formatting.Indented);
return json;
}
Ahora un ejemplo de llamada al método anterior podría ser el siguiente:
String json = Datos.Interfaz.GetDSJSon(dst.vista_portada, “dsEjemplo”);
Donde pasamos dst.vista_portada
, que es una tabla tipada y el nombre del dataset que vamos a generar.