Hola, estoy construyendo un webapi que solo funcionara como un tunel para las llamadas desde el cliente, quien le enviara un json, a la vez el webapi lo unico que hara sera llamar al StoredProcedure que esta en Oracle y pasarle sus parametros, pero el json viene demasiado anidado y por lo menos en Oracle he pensado hacer un tipo de dato personalizado (coleccion), pero no se como desmenuzar este array en el web api y pasarselo al StoredProcedure, alguien me puede dar una idea, el json me llega asi:(lo convertire a array)
{
"pedido": {
"key": "value",
"key2": "value2",
"detallepedigo": [{
"key": "value",
"key2": "value2",
"especificacion": [{
"key": "value",
"key2": "value2",
"subespecificacion": [{ "key": "value","key2": "value2" },
{ "key": "value","key2": "value2" }]
},
{
"key": "value",
"key2": "value2",
"subespecificacion": [{ "key": "value", "key2": "value2" },
{ "key": "value", "key2": "value2" }]
}
]
},
{
"key": "value",
"key2": "value2",
"especificacion": [{
"key": "value",
"key2": "value2",
"subespecificacion": [{ "key": "value", "key2": "value2" },
{ "key": "value", "key2": "value2" }]
},
{
"key": "value",
"key2": "value2",
"subespecificacion": [{ "key": "value", "key2": "value2" },
{ "key": "value", "key2": "value2" }]
}
]
}
]
}
}
Primero, no he trabajado mucho con JSON (aún), pero, no se supone que lo que obtengas sea un diccionario?
De cualquier forma, creo que lo que tienes que hacer es iterar por el array original? Si sabes la estructura relativa de lo que tienes, en el momento que sea posible encontrarte con un array, simplemente llamas a un metodo que sea recursivo y vas iterando en profundidad. Algo así como este pseudo-código:
static main()
//Haces las cosas que hagas para obtenerlo y guardas en la variable array
//Ciclo que recorre el array principal
for i=0 to array.length do
if array[i].isArray then
MetodoRecursivo(array[i])
else
//Hacer algo con ese elemento
end
static void MetodoRecursivo(array)
for i in array.Length do
if array[i].isArray then
MetodoRecursivo(array[i])
else
//imprimir o calcular o almacenar o modificar (sea lo que hagas)
end
Si dieras más detalles sobre tu implementación quizás se te pudiera ayudar más.
Salu2s
Utiliza https://www.newtonsoft.com/json
Un saludo.
Tu colección podría tener una clase base, con estos detalles:
enumeracion Tipos
TIPO_DETALLE_PEDIDO
TIPO_ESPECIFICACION
TIPO_SUBESPECIFICACION
fin enumeracion
Clase Detalles
string Key1
string Key2
Tipos Tipo
// Byte tipoAnidado
fin clase
Clase Pedidos
array de Detalles Pedido()
// FALTA: métodos públicos y/o privados que precise la clase para rellenar y accede al array Pedido
fin clase
Si la subespecificaciones pueden estar anidadas, si es fija y siempre la misma añade diferentes tipos a la enumeración hasta ese nivel de anidación, si es variable, añade un campo (por ejemplo: tipoAnidado) en la clase detalles que señale un valor. 0 sería para la subespecificación bajo la 'especificación', con cada subespecificación bajo una subespecificación suma 1...
Gracias, me han informado que el webapi solo transformara a array el json y lo enviara junto con el nombre del package de Oracle, ahora estoy viendo como crear un tipo de dato personalizado en Oracle para poder recibir este array c# solo le dira que es un DbType.Structured