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 JSON a un objeto dinámico o a una clase en C#

Estoy tratando de deserializar JSON en un objeto para poder agregarlo a Elastic Search. El JSON puede ser de diferentes tipos de objetos en el proyecto, por lo que me gustaría que la función fuera dinámica.

Primero estoy serializando los datos que obtengo del contexto de EF Core:

var serializedObject = JsonConvert.SerializeObject(document, Formatting.None,
                       new JsonSerializerSettings()
                       {
                           ReferenceLoopHandling = ReferenceLoopHandling.Ignore
                       });

Luego me gustaría deserializarlo en un objeto. Por ejemplo, si tengo:

public class EValues 
{
    public dynamic values { get; set; }
}

var test = JsonConvert.DeserializeObject<evalues>(serializedObject.ToString());

Me gustaría que el JSON se deserialice como sigue:

{
   "values":{
      "StudentId":"60712555-ff1d-4a3e-8c81-08d9c2fc4423",
      "Student":{
         "Name":"string",
         "Country":"string",
         "Street":"string"
      }
   }
}

El JSON serializedObject que estoy tratando de deserializar es el siguiente:

{
"StudentId":"60712555-ff1d-4a3e-8c81-08d9c2fc4423",
"Student":{
"Name":"string",
"Country":"string",
"Street":"string"
}
}

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para desserializar el JSON en un objeto dinámico de manera dinámica y flexible, puedes utilizar la clase JObject del espacio de nombres Newtonsoft.Json.Linq. Aquí tienes un ejemplo:

    using Newtonsoft.Json.Linq;
    
    // Desserializar el JSON en un JObject
    var obj = JObject.Parse(serializedObject);
    
    // Crear un nuevo objeto dinámico y añadir el JObject desserializado a la propiedad "values"
    dynamic valuesObj = new EValues();
    valuesObj.values = obj;
    
    // Ahora puedes utilizar el objeto dinámico para añadir datos a ElasticSearch
    // Por ejemplo:
    var indexResponse = client.IndexDocument(valuesObj);
    

    Este enfoque te permite desserializar cualquier objeto JSON (siempre y cuando sea un JSON válido) en un objeto dinámico que se pueda utilizar fácilmente para añadir datos a ElasticSearch. La clase JObject proporciona mucha flexibilidad y capacidades de consulta poderosas para trabajar con datos JSON, lo que la convierte en una excelente opción para escenarios de serialización dinámica.

Comments are closed.