Home > OS >  Mapping JSON c#
Mapping JSON c#

Time:03-15

I need to bring the list inside "listaEncProv" from the following JSON:

{
    "$id": "1",
    "Exito": true,
    "StatusCode": 200,
    "Error": null,
    "Data": {
        "$id": "2",
        "listaEncProv": [
            {
                "$id": "3",
                "nroCertificado": 1,
                "totalParcial": null,
                "modifPrecios": null
            },
            {
                "$id": "4",
                "nroCertificado": 2,
                "totalParcial": null,
                "modifPrecios": null
            },
            {
                "$id": "5",
                "nroCertificado": 3,
                "totalParcial": null,
                "modifPrecios": null
            },
            {
                "$id": "6",
                "nroCertificado": 4,
                "totalParcial": null,
                "modifPrecios": null
            },
            {
                "$id": "7",
                "nroCertificado": 5,
                "totalParcial": null,
                "modifPrecios": null
            },
            {
                "$id": "8",
                "nroCertificado": 6,
                "totalParcial": null,
                "modifPrecios": null
            },
            {
                "$id": "9",
                "nroCertificado": 7,
                "totalParcial": null,
                "modifPrecios": null
            },
            {
                "$id": "10",
                "nroCertificado": 8,
                "totalParcial": null,
                "modifPrecios": null
            },
            {
                "$id": "11",
                "nroCertificado": 9,
                "totalParcial": null,
                "modifPrecios": null
            },
            {
                "$id": "12",
                "nroCertificado": 10,
                "totalParcial": null,
                "modifPrecios": null
            },
            {
                "$id": "13",
                "nroCertificado": 11,
                "totalParcial": null,
                "modifPrecios": null
            },
            {
                "$id": "14",
                "nroCertificado": 12,
                "totalParcial": null,
                "modifPrecios": null
            },
            {
                "$id": "15",
                "nroCertificado": 13,
                "totalParcial": null,
                "modifPrecios": null
            },
            {
                "$id": "16",
                "nroCertificado": 14,
                "totalParcial": null,
                "modifPrecios": null
            },
            {
                "$id": "17",
                "nroCertificado": 15,
                "totalParcial": null,
                "modifPrecios": null
            },
            {
                "$id": "18",
                "nroCertificado": 16,
                "totalParcial": null,
                "modifPrecios": null
            },
            {
                "$id": "19",
                "nroCertificado": 17,
                "totalParcial": null,
                "modifPrecios": null
            },
            {
                "$id": "20",
                "nroCertificado": 18,
                "totalParcial": null,
                "modifPrecios": null
            },
            {
                "$id": "21",
                "nroCertificado": 19,
                "totalParcial": null,
                "modifPrecios": null
            },
            {
                "$id": "22",
                "nroCertificado": 20,
                "totalParcial": null,
                "modifPrecios": null
            },
            {
                "$id": "23",
                "nroCertificado": 21,
                "totalParcial": null,
                "modifPrecios": null
            },
            {
                "$id": "24",
                "nroCertificado": 22,
                "totalParcial": null,
                "modifPrecios": null
            },
            {
                "$id": "25",
                "nroCertificado": 23,
                "totalParcial": null,
                "modifPrecios": null
            },
            {
                "$id": "26",
                "nroCertificado": 24,
                "totalParcial": null,
                "modifPrecios": null
            },
            {
                "$id": "27",
                "nroCertificado": 25,
                "totalParcial": null,
                "modifPrecios": null
            },
            {
                "$id": "28",
                "nroCertificado": 26,
                "totalParcial": null,
                "modifPrecios": null
            },
            {
                "$id": "29",
                "nroCertificado": 27,
                "totalParcial": null,
                "modifPrecios": null
            },
            {
                "$id": "30",
                "nroCertificado": 28,
                "totalParcial": null,
                "modifPrecios": null
            }
        ],
        "listaEncDef": []
    }
}

The idea is to bring all those items into a List.

var contenido = result.Content.ReadAsStringAsync().Result;

        JObject resultados = JObject.Parse(contenido);

        foreach (var item in resultados["Data"])
        {
            var lista1 = resultados["listaEncProv"].ToList();
            foreach (var item2 in lista1)
            {
                Certificaciones nuevoCert = new Certificaciones();
                nuevoCert.Id = (string)resultados["$id"];

                nuevoCert.nroCertificado = (int)resultados["nroCertificado"];

                if (resultados["totalParcial"] == null)
                {
                    nuevoCert.totalParcial = 0;
                }
                else
                {
                    nuevoCert.totalParcial = (int)resultados["totalParcial"];
                }

                if (resultados["modifPrecios"] == null)
                {
                    nuevoCert.totalParcial = 0;
                }
                else
                {
                    nuevoCert.totalParcial = (int)resultados["modifPrecios"];
                }



                lista.Add(nuevoCert);
            }
        }
    

But it gives me the following error:

Error de servidor en la aplicación '/'. El valor no puede ser nulo. Nombre del parámetro: source Descripción: Excepción no controlada al ejecutar la solicitud Web actual. Revise el seguimiento de la pila para obtener más información acerca del error y dónde se originó en el código.

Detalles de la excepción: System.ArgumentNullException: El valor no puede ser nulo. Nombre del parámetro: source``

CodePudding user response:

you can do it this way

var contenido = result.Content.ReadAsStringAsync().Result;
JObject resultados = JObject.Parse(contenido);

List<Certificaciones> lista1 = resultados["Data"]["listaEncProv"].ToObject<List<Certificaciones>>();

class

public class Certificaciones
{
    [JsonProperty("$id")]
    public string Id { get; set; }
    public int? nroCertificado { get; set; }
    public int? totalParcial { get; set; }
    public int? modifPrecios { get; set; }
}

CodePudding user response:

Why not de-serialize to strongly typed Model class for your JSON string and then get your properties from there and add them to your list? I am giving an example of how you would de-serialize your JSON to a Model class:

You can refer to a working example here: https://dotnetfiddle.net/5aJFfz

using System;
using Newtonsoft.Json;
using System.Collections.Generic;
                    
public class Program
{
    public static void Main()
    {
        var myJsonString=@"{'$id':'1','Exito':true,'StatusCode':200,'Error':null,'Data':{'$id':'2','listaEncProv':[{'$id':'3','nroCertificado':1,'totalParcial':null,'modifPrecios':null},{'$id':'4','nroCertificado':2,'totalParcial':null,'modifPrecios':null},{'$id':'5','nroCertificado':3,'totalParcial':null,'modifPrecios':null},{'$id':'6','nroCertificado':4,'totalParcial':null,'modifPrecios':null},{'$id':'7','nroCertificado':5,'totalParcial':null,'modifPrecios':null},{'$id':'8','nroCertificado':6,'totalParcial':null,'modifPrecios':null},{'$id':'9','nroCertificado':7,'totalParcial':null,'modifPrecios':null},{'$id':'10','nroCertificado':8,'totalParcial':null,'modifPrecios':null},{'$id':'11','nroCertificado':9,'totalParcial':null,'modifPrecios':null},{'$id':'12','nroCertificado':10,'totalParcial':null,'modifPrecios':null},{'$id':'13','nroCertificado':11,'totalParcial':null,'modifPrecios':null},{'$id':'14','nroCertificado':12,'totalParcial':null,'modifPrecios':null},{'$id':'15','nroCertificado':13,'totalParcial':null,'modifPrecios':null},{'$id':'16','nroCertificado':14,'totalParcial':null,'modifPrecios':null},{'$id':'17','nroCertificado':15,'totalParcial':null,'modifPrecios':null},{'$id':'18','nroCertificado':16,'totalParcial':null,'modifPrecios':null},{'$id':'19','nroCertificado':17,'totalParcial':null,'modifPrecios':null},{'$id':'20','nroCertificado':18,'totalParcial':null,'modifPrecios':null},{'$id':'21','nroCertificado':19,'totalParcial':null,'modifPrecios':null},{'$id':'22','nroCertificado':20,'totalParcial':null,'modifPrecios':null},{'$id':'23','nroCertificado':21,'totalParcial':null,'modifPrecios':null},{'$id':'24','nroCertificado':22,'totalParcial':null,'modifPrecios':null},{'$id':'25','nroCertificado':23,'totalParcial':null,'modifPrecios':null},{'$id':'26','nroCertificado':24,'totalParcial':null,'modifPrecios':null},{'$id':'27','nroCertificado':25,'totalParcial':null,'modifPrecios':null},{'$id':'28','nroCertificado':26,'totalParcial':null,'modifPrecios':null},{'$id':'29','nroCertificado':27,'totalParcial':null,'modifPrecios':null},{'$id':'30','nroCertificado':28,'totalParcial':null,'modifPrecios':null}],'listaEncDef':[]}}";
        var myList=JsonConvert.DeserializeObject<Root>(myJsonString);
        //var contenido = result.Content.ReadAsStringAsync().Result;
        //var myList=JsonConvert.DeserializeObject<Root>(contenido);
        //Get your listaEncProv below
        var lista1 = myList.Data.listaEncProv;
        //You can iterate over your list to get specific data as required
        foreach(var item in lista1)
        {
            Console.WriteLine(item.Id);
            Console.WriteLine(item.modifPrecios);   
            Console.WriteLine(item.nroCertificado); 
            Console.WriteLine(item.totalParcial);

           //Add to your list here as required

        }
    }
}

public class ListaEncProv
{
    [JsonProperty("$id")]
    public string Id { get; set; }
    public int nroCertificado { get; set; }
    public object totalParcial { get; set; }
    public object modifPrecios { get; set; }
}

public class Data
{
    [JsonProperty("$id")]
    public string Id { get; set; }
    public List<ListaEncProv> listaEncProv { get; set; }
    public List<object> listaEncDef { get; set; }
}

public class Root
{
    [JsonProperty("$id")]
    public string Id { get; set; }
    public bool Exito { get; set; }
    public int StatusCode { get; set; }
    public object Error { get; set; }
    public Data Data { get; set; }
}
  • Related