es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

deserializar y convertir a otra clase utilizando Linq y Newtonsoft.

Tengo un modelo como este

private class CPDocs
{
    public string DocumentDetails { get; set; }
    public bool IsApproved { get; set; }
}

y una instancia de una lista de esta clase contiene datos como este

List<cpdocs> cd = new List<cpdocs>();
CPDocs cpd = new CPDocs();
cpd.DocumentDetails = "{\"name\":\"John\", \"age\":30, \"car\":null}";
cpd.IsApproved = false;
cd.Add(cpd);

(Los datos reales provienen de una fuente externa y no tengo control sobre ellos, por lo que no puedo cambiar cómo se agregan los datos a la lista)

Quiero deserializar la cadena JSON y construir una clase como esta. Para que DocumentDetails e IsApproved estén dentro de una sola clase

public class person
{
    public string name { get; set; }
    public string age { get; set; }
    public string car { get; set; }
    public bool IsApproved { get; set; }
}

¿Existe alguna manera de lograr esto utilizando Newtonsoft Json y Linq?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Sí, es posible lograr esto utilizando Newtonsoft Json y Linq. Primero, deberás instalar el paquete Newtonsoft.Json en tu proyecto. Puedes hacer esto yendo al Gestor de paquetes NuGet y buscando Newtonsoft.Json.

    Una vez que hayas instalado el paquete, puedes utilizar el siguiente código para deserializar la cadena JSON y construir una clase como person:

    using Newtonsoft.Json.Linq;
    
    //...
    
    var personList = new List<person>();
    foreach (var item in cd)
    {
        var docDetails = JObject.Parse(item.DocumentDetails);
        var person = new person
        {
            name = docDetails.GetValue("name").ToString(),
            age = docDetails.GetValue("age").ToString(),
            car = docDetails.GetValue("car").ToString(),
            IsApproved = item.IsApproved
        };
        personList.Add(person);
    }
    

    En este código, primero creamos una List de la clase person para contener nuestros datos deserializados. Luego, recorremos cada elemento en la lista original cd. Dentro del bucle, utilizamos el método JObject.Parse() de Newtonsoft.Json para deserializar la propiedad DocumentDetails en un JObject.

    A continuación, creamos un nuevo objeto person y establecemos sus propiedades utilizando los valores del JObject deserializado y la propiedad IsApproved de la clase original CPDocs. Finalmente, agregamos el nuevo objeto person a nuestra personList.

    Ten en cuenta que este código supone que la cadena JSON siempre contiene las propiedades "name", "age" y "car". Si alguna de estas propiedades falta, el código lanzará una excepción de NullReferenceException. Es posible que debas modificar el código para manejar propiedades faltantes o datos inesperados.

Comments are closed.