Como podria recorrer un array anidado c#

Iniciado por d91, 24 Enero 2018, 18:56 PM

0 Miembros y 1 Visitante están viendo este tema.

d91

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)
Código (json) [Seleccionar]

{
"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" }]
}
]
}
]
}
}

DarK_FirefoX

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

z3nth10n


Interesados hablad por Discord.

Serapis

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...

d91

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