Usuario
Consulta sobre arreglo JSON desde Servicio WCF

Pregunta
-
Estoy ejecutando procedimientos almacenados en mi proyecto
WCF C#
. De uno de mis SP recibo algo asi :CeldaId CeldaIndicadorCodigo CeldaIndicadorTipoCodigo
Luego con el valor de
Celda Id
llamo a otro SP que me trae :CeldaKeyCodigo CeldaKeyValor
Desde el primer SP obtengo
CeldaId
y con ese valor obtengo los resultados del segundo SP.Mi idea es desde mi servicio entregar un arreglo
JSON
más o menos con esta estructuraCeldas : [ IndicadorCodigo : [ { CeldaKeyCodigo : valor, CeldaKeyValor : valor }, { CeldaKeyCodigo : valor, CeldaKeyValor : valor } ] ]
Vale decir, agrupar los valores de la consulta de mi segundo SP por el valor que tenga IndicadorCodigo.
La manera en que lo hice fue lo siguiente... Cree una clase llamada Celda con los campos anteriormente nombrados más una Lista de una clase llamada CeldaKeyVal con los cambos que me devuelve mi segundo SP.
public class Celda { [DataMember] public int celda_id { get; set; } [DataMember] public int celda_indicador_codigo { get; set; } [DataMember] public int celda_indicador_tipo_codigo { get; set; } [DataMember] public List<CeldaKeyVal> valores_celda { get; set; } } public class CeldaKeyVal { [DataMember] public string celda_key_codigo { get; set; } [DataMember] public string celda_key_valor { get; set; } }
Luego de tener esta estructura, recorro asi los resultados :
public ListaCeldas GetCheckIn(int gsalid) { SqlConnection conn = new SqlConnection(Db); List < Celda > celdas = new List < Celda > (); ListaCeldas listaCeldas = new ListaCeldas(); try { SqlCommand cmd = new SqlCommand("MBL_SEL_CELDAS", conn); cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.AddWithValue("gsalid", gsalid); conn.Open(); cmd.ExecuteNonQuery(); DataTable dtCelda = new DataTable(); dtCelda.Load(cmd.ExecuteReader()); foreach(DataRow dr in dtCelda.Rows) { Celda celda = new Celda(); celda.celda_id = Convert.ToInt32(dr["CeldaId"]); celda.celda_indicador_codigo = Convert.ToString(dr["CeldaIndicadorCodigo"]); celda.celda_indicador_tipo = Convert.ToString(dr["CeldaIndicadorTipoCodigo"]); DataTable dtCeldasKey = new DataTable(); SqlCommand cmd_celdas_key = Helper.GetCeldaValoresKey(celda.celda_id); dtCeldasKey.Load(cmd_celdas_key.ExecuteReader()); List < CeldaKeyVal > listaCeldaKey = new List < CeldaKeyVal > (); foreach(DataRow drCeldasKey in dtCeldasKey.Rows) { CeldaKeyVal celda_key_val = new CeldaKeyVal(); celda_key_val.celda_key_codigo = Convert.ToString(drCeldasKey["CeldaKeyCodigo"]); celda_key_val.celda_key_valor = Convert.ToString(drCeldasKey["CeldaKeyValue"]); listaCeldaKey.Add(celda_key_val); } celda.valores_celda = listaCeldaKey; celdas.Add(celda); } List < Celda > cl = celdas.OrderBy(c => c.celda_indicador_codigo).ToList(); listaCeldas.celdas = cl; if (celdas.Count > 0) { listaCeldas.status = 1; } } catch (Exception e) { listaCeldas.status = 0; } finally { conn.Close(); } return listaCeldas; }
Esto funciona bien para mi pero no el orden que deseo, este es el JSON que recibo
{ "GetCheckInResult": { "celdas": [ { "celda_id": 1, "celda_indicador_codigo": "I001", "celda_indicador_tipo": "T01", "valores_celda": [ { "celda_key_codigo": "CODIGO", "celda_key_valor": "CHECK1" }, { "celda_key_codigo": "IMAGEN", "celda_key_valor": "L76nD.jpg" }, { "celda_key_codigo": "SUBTEXTO", "celda_key_valor": "prueba subtexto 1" }, { "celda_key_codigo": "TEXTO", "celda_key_valor": "Prueba dominio 1" } ] }, { "celda_id": 4, "celda_indicador_codigo": "I002", "celda_indicador_tipo": "T03", "valores_celda": [ { "celda_key_codigo": "CODIGO", "celda_key_valor": "codigo" } ] }, { "celda_id": 5, "celda_indicador_codigo": "I002", "celda_indicador_tipo": "T03", "valores_celda": [ { "celda_key_codigo": "CODIGO", "celda_key_valor": "ssddsds" } ] }, { "celda_id": 3, "celda_indicador_codigo": "I003", "celda_indicador_tipo": "T02", "valores_celda": [ { "celda_key_codigo": "CODIGO", "celda_key_valor": "sdadsa" }, { "celda_key_codigo": "IMAGEN", "celda_key_valor": "L76nD.jpg" }, { "celda_key_codigo": "TEXTO", "celda_key_valor": "Texto 1" } ] } ], "status": 1 } }
Sé que el error esta en mi estructura de las clases pero no se me ocurre como armarlas para conseguir el formato que quiero conseguir.
LO QUE ESPERO
Obtener un arreglo de celdas y sus valores ordenamos por
IndicadorCodigo
Json esperado :
{ "GetCheckInResult": { "celdas": [ "T01" : [ { "celda_key_codigo": "CODIGO", "celda_key_valor": "CHECK1" }, { "celda_key_codigo": "IMAGEN", "celda_key_valor": "L76nD.jpg" }, { "celda_key_codigo": "SUBTEXTO", "celda_key_valor": "prueba subtexto 1" }, { "celda_key_codigo": "TEXTO", "celda_key_valor": "Prueba dominio 1" } ], "T02" : [ { "celda_key_codigo": "CODIGO", "celda_key_valor": "CHECK1" }, { "celda_key_codigo": "IMAGEN", "celda_key_valor": "L76nD.jpg" }, { "celda_key_codigo": "SUBTEXTO", "celda_key_valor": "prueba subtexto 1" }, { "celda_key_codigo": "TEXTO", "celda_key_valor": "Prueba dominio 1" } ] ], "status": 1 } }
Nicolás Hernández Chile
- Cambiado Laura Ceglz martes, 25 de octubre de 2016 14:24