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.

Convertir objeto a una lista de tipo desconocido

Tengo una lista de tipo desconocido que proviene de una serialización como JArray, quiero establecerla como valor en un PropInfo pero el tipo de lista es desconocido en tiempo de ejecución.

var propInfo = someClass.GetType().GetProperties().FirstOrDefault();

var typeM = Type.GetType("ClassName, ClassLibrary");
var propValue = SomePropValueObject; // Esto era List si tipoM
Type listType = typeof(List<>).MakeGenericType(typeM);

propInfo.SetValue("SomeLib", propValue as List<???listType???>);

Cualquier dirección sería genial.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Parece que estás intentando establecer un valor a una propiedad de un tipo desconocido utilizando reflexión en C#. Específicamente, tienes un JArray serializado que deseas establecer como valor en una propiedad de un tipo de lista desconocido en tiempo de ejecución.

    Para lograr esto, puedes seguir estos pasos:

    • Obtén la PropertyInfo de la propiedad para la cual deseas establecer el valor utilizando los métodos GetType() y GetProperties().
    • Define el tipo del JArray serializado utilizando el método Type.GetType(). En este caso, parece que tienes una cadena ClassName y un espacio de nombres ClassLibrary para este tipo.
    • Asigna el valor del objeto JArray serializado a una variable de objeto (en tu ejemplo, SomePropValueObject).
    • Obtén el tipo de la lista utilizando el método typeof(List<>).MakeGenericType() y pasando el tipo del JArray serializado como parámetro.
    • Finalmente, establece el valor de la propiedad utilizando el método SetValue() del objeto PropertyInfo. Deberás hacer un casting del objeto propValue a List<> con el parámetro listType que acabas de crear.

    Aquí está el código actualizado con algunos cambios de nombre de variables para mayor claridad:

    var propertyInfo = someClass.GetType().GetProperties().FirstOrDefault();
    
    var serializedType = Type.GetType("ClassName, ClassLibrary");
    var serializedValue = someSerializedJArray; //esto era una lista de serializedType
    
    Type listType = typeof(List<>).MakeGenericType(serializedType);
    
    propertyInfo.SetValue("SomeLib", serializedValue as List<>), listType);
    

    Ten en cuenta que debes proporcionar el espacio de nombres y nombre de tipo correctos para el tipo serializado al utilizar el método Type.GetType(). Además, asegúrate de que el valor que estás intentando establecer para la propiedad se pueda convertir al tipo correcto para evitar errores en tiempo de ejecución.

Comments are closed.