Cómo deserializar y usar la propiedad de matrices anidadas JSON
– UnityAssets3Free
bienvenido , me llamo Juan y esta vez os traigo
esta nueva pregunta
estoy haciendo uno C# proyecto en Unity basado en el juego de cartas Yu-Gi-Oh. Estoy usando esta API: https://db.ygoprodeck.com/api-guide/
La API da acceso a todas las cartas del juego con su información (nombre, efecto, valor ATK) en una JSON. Pero antes de usar ese JSON, estoy trabajando con un JSON en un TXT archivo que está escrito con el mismo modelo que las API, de esta manera no hago solicitudes innecesarias a sus servidores hasta que mi proyecto esté listo, y es más fácil de probar porque la API contiene miles de tarjetas, el JSON que estoy experimentando actualmente con contiene sólo 1 tarjeta.
Ahí está:
"data":[
"id":6983839,
"name":"Tornado Dragon",
"type":"XYZ Monster",
"desc":"2 Level 4 monstersnOnce per turn (Quick Effect): You can detach 1 material from this card, then target 1 Spell/Trap on the field; destroy it.",
"atk":2100,
"def":2000,
"level":4,
"race":"Wyrm",
"attribute":"WIND",
"card_images":[
"id":6983839,
"image_url":"https://storage.googleapis.com/ygoprodeck.com/pics/6983839.jpg",
"image_url_small":"https://storage.googleapis.com/ygoprodeck.com/pics_small/6983839.jpg"
]
]
me gustaría conseguir el Nombre los descripción (descripción) y el URL de la imagen de la tarjeta Logré mostrar el nombre y la descripción, pero no sé cómo podría acceder a la URL de la imagen ubicado en la segunda matriz del JSON (imagen_de_la_tarjeta variedad).
ahí están mis Clasesy cómo logré mostrar el nombre y la descripción de la tarjeta:
public class Root
public Card[] data get; set;
public class Card
public int id get; set;
public string name get; set;
public string desc get; set;
public CardImage[] card_images get; set;
public class CardImage
public int id get; set;
public string image_url get; set;
public string image_url_small get; set;
void Start()
string jsonString = File.ReadAllText("myTxtJson.txt");
var cards = JsonHelper.FromJson<Root>(jsonString);
foreach(Card card in cards.data)
Debug.Log(card.name); // Display the name of the card
Debug.Log(card.desc); // Display the effect of the card
El punto sería (si es posible) tener acceso «simple» a las 3 propiedades que necesito que son nombre de tarjeta, tarjeta.desc y tarjeta.image_url . Gracias, si me pueden ayudar, soy nuevo en OOP, así que lo siento si hay grandes errores, también agradezco consejos sobre el código existente.
1 respuesta 1
un profesional estaría usando Linq
using System.Linq;
List<CardInfo> cardInfoList = cards.data.Select(d => new CardInfo
id = d.id,
name = d.name,
image_url = d.card_images.Select(d => d.image_url).ToList()
).ToList();
foreach(CardInfo card in cardInfoList )
Debug.Log(card.name); // Display the name of the card
Debug.Log( string.Join(",", card.image_url); // Display the urls of the card
// or you can find a card by name
CardInfo tornadoDragonCardInfo = cardInfoList
.Where(d => d.name == "Tornado Dragon")
.FirstOrDefault();
int tornadoDragonId = tornadoDragonCardInfo.id;
string tornadoDragonFirstImgUrl = tornadoDragonCardInfo.image_url[0];
public class CardInfo
public int id get; set;
public string name get; set;
public List<string> image_url get; set;
pero si necesitas algo muy simple no necesitas ninguna clase extra
int tornadoDragonId = cards.data[0].id;
string tornadoDragonName = cards.data[0].name;
string tornadoDragonImgUrl = cards.data[0].card_images[0].image_url;
pero solo funcionará para su json específico
nota: si aun no se resuelve tu pregunta por favor dejar un comentario y pronto lo podremos de nuevo , muchas gracias
por hoy,espero que te halla servido