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?
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
:En este código, primero creamos una
List
de la claseperson
para contener nuestros datos deserializados. Luego, recorremos cada elemento en la lista originalcd
. Dentro del bucle, utilizamos el métodoJObject.Parse()
de Newtonsoft.Json para deserializar la propiedadDocumentDetails
en unJObject
.A continuación, creamos un nuevo objeto
person
y establecemos sus propiedades utilizando los valores delJObject
deserializado y la propiedadIsApproved
de la clase originalCPDocs
. Finalmente, agregamos el nuevo objetoperson
a nuestrapersonList
.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 deNullReferenceException
. Es posible que debas modificar el código para manejar propiedades faltantes o datos inesperados.