Recientemente amplié una publicación sobre cómo llamar a la API de finanzas de yahoo con detalles sobre cómo serializar el JSON devuelto a un objeto. Decidí hacer esta publicación basándome en ella, ya que podría ayudar a otros que solo necesitan deserializar JSON. Como desarrolladores, nos gusta convertir nuestro JSON en clases para que sea más fácil trabajar con ellos y sean más "nativos" en el código que escribimos. Usaré el ejemplo de la publicación de la API de Yahoo, pero se puede aplicar a cualquier objeto JSON.
Usaremos el siguiente JSON como ejemplo:
{
"quoteSummary": {
"result": [
{
"assetProfile": {
"address1": "One Apple Park Way",
"city": "Cupertino",
"state": "CA",
"zip": "95014",
"country": "United States",
"phone": "408 996 1010",
"website": "https://www.apple.com",
"industry": "Consumer Electronics",
"sector": "Technology"
}
}
]
}
}
Para serializarlo en una clase, necesitamos una clase, o para las varias clases anteriores. Cada clase tendrá que representar una capa (objeto) en el JSON y juntos ser una representación de la estructura. A continuación, hice estas clases a partir de QuoteSummaryResponse
(el objeto externo sin nombre) al AssetProfile
que contiene la información real:
public class QuoteSummaryResponse
{
public QuoteSummary QuoteSummary { get; set; }
}
public class QuoteSummary
{
public QuoteSummaryResult[] Result { get; set; }
}
public class QuoteSummaryResult
{
public AssetProfile AssetProfile { get;set; }
}
public class AssetProfile
{
public string address1 { get; set; }
public string city { get; set; }
public string state { get; set; }
public string zip { get; set; }
public string country { get; set; }
public string phone { get; set; }
public string website { get; set; }
public string industry { get; set; }
public string sector { get; set; }
}
Usando lo anterior, podemos deserializar el JSON en un objeto usando DeserializeObject y obtener cualquier propiedad, por ejemplo, la dirección:
var data = JsonConvert.DeserializeObject<QuoteSummaryResponse>(responseBody);
var address = data.QuoteSummary.Result[0].AssetProfile.address1;
Eso es todo, ahora puede trabajar con JSON como un objeto. Espero que hayas encontrado esto útil, ¡déjame saber lo que piensas en los comentarios a continuación!