Convertir Json a C#

Cuando trabajemos con MVC y Rest web service, nos encontraremos tarde o temprado con la necesidad de convertir objetos JSON en colleciones tipadas de nuestras propias clases.

Utilizando la librería para Json.NET (Newtonsoft)  lo podemos hacer de una forma rápida limpia y sencilla:

Para este ejemplo  usamos un objecto Json con una colección de categorías, y para hacer el ejemplo un poco más complejo la colección es un propiedad del objecto JSON (no el propio objecto Json) y las categorías tienen hijos que son a su vez categorías.

El objeto Json sería como el siguiente:

   1: {

   2:   "CategoriesCount": 0,

   3:   "Categories": [

   4:     {

   5:       "Id": 1,

   6:       "Name": "Plastico militar",

   7:       "Description": null,

   8:       "KeyId": "PLAST-MIL",

   9:       "Childs": [

  10:         {

  11:           "Id": 2,

  12:           "Name": "Plastico militar 1/35",

  13:           "Description": null,

  14:           "KeyId": "PLAST-MIL-135",

  15:           "Childs": null,

  16:           "IsRootCategory": false

  17:         },

  18:         {

  19:           "Id": 3,

  20:           "Name": "Plastico militar 1/48",

  21:           "Description": null,

  22:           "KeyId": "PLAST-MIL-148",

  23:           "Childs": null,

  24:           "IsRootCategory": false

  25:         }

  26:       ],

  27:       "IsRootCategory": true

  28:     },

  29:     {

  30:       "Id": 2,

  31:       "Name": "Plastico militar 1/35",

  32:       "Description": null,

  33:       "KeyId": "PLAST-MIL-135",

  34:       "Childs": [],

  35:       "IsRootCategory": false

  36:     },

  37:     {

  38:       "Id": 3,

  39:       "Name": "Plastico militar 1/48",

  40:       "Description": null,

  41:       "KeyId": "PLAST-MIL-148",

  42:       "Childs": [],

  43:       "IsRootCategory": false

  44:     }

  45:   ]

  46: }

Queremo convertir este objeto en una lista tipada de una clase “Category” por lo que la clase “Category” debe tener las misma propiedades públicas que un elemento de la colección “Categories” del objeto Json.

Observamos que además esta clase posee una propiedad “Childs” que es a su vez una colección de objetos “Category”:

   1: public class Category

   2: {

   3:     public int Id { get; set; }

   4:     public string Name { get; set; }

   5:     public string Description { get; set; }

   6:     public string KeyId { get; set; }

   7:     public List<Category> Childs { get; set; }

   8:     public bool IsRootCategory { get; set; }

   9: }

 

Para convertir el objeto Json a nuestra lista genérica usaremos el método “Deserialize” de la clase “JsonConvert” de  la librería Json.NET, que se puede agregar desde nuGet: Json.NET Download

   1:  

   2: List<Category> Categories = (List<Category>)JsonConvert.DeserializeObject(myJsonCategories["Categories"].ToString(), typeof(List<Category>));

   3:  

 

Y voila, ya tenemos nuestra lista genérica dispuesta a ser consumida.

Espero que os pueda ser útil.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *