¿Cómo llenar la lista genérica en tiempo de ejecución en C#?

Tengo una clase que se ve a continuación:

 public class GUIView 
    {
        public GUIView()
        {
            Views = new List<View>();
        }


        public List<View> Views
        {
            get;
            set;
        }

        public ViewMode ViewMode
        {
            get;
            set;
        }

        public ViewStatus Status
        {
            get;
            set;
        }
}


public class View 
    {        
        public View()
        {
            DisplayFunctions = new List<DisplayFunction>();
        }        
        public ChartType ViewType
        {
            get;
            set;
        }        
        public List<DisplayFunction> DisplayFunctions
        {
            get;
            set;
        }
    }

 public class DisplayFunction
    {
        public int Id
        {
            get;set;
        }

        public byte[] Color
        {
            get;
            set;
        }

        public FunctionShape Shape
        {
            get;
            set;
        }
    }

Tengo un archivo xml desde donde estoy completando los objetos en tiempo de ejecución. Puedo completar las propiedades simples como int string, etc.

Pero no encuentro la manera de llenar la propiedad que es de tipo Lista en mi propiedad de ejemplo 'Vistas' que es de tipo Lista.

Incluso yo no soy capaz de encontrar el tipo de esa propiedad.

Simplemente quiero inicializar la propiedad en tiempo de ejecución como.

Views = new List<View>();

y luego crea una instancia de View

View v = new View();

y luego llene el objeto de vista y finalmente agréguelo a la lista

Views.Add(view)

Aquí está mi archivo xml:

<?xml version="1.0" encoding="utf-8"?>
<Views>
  <GUIView ViewMode="Single" Status="On">
    <View ViewType="Lt">
      <DisplayFunction Shape="Bar" Id="514" Color="122,222,123,133" />
    </View>
    <View ViewType="Lt">
      <DisplayFunction Shape="Bar" Id="122" Color="122,222,123,133" />
    </View>
  </GUIView>
  <GUIView ViewMode="Dual" Status="On">
    <View ViewType="Lt">
      <DisplayFunction Shape="Bar" Id="122" Color="122,222,123,133" />
    </View>
    <View ViewType="Lt">
      <DisplayFunction Shape="Bar" Id="122" Color="122,222,123,133" />
    </View>
  </GUIView>
  <GUIView ViewMode="Dual" Status="On">
    <View ViewType="Lt">
      <DisplayFunction Shape="Bar" Id="122" Color="122,222,123,133" />
    </View>
    <View ViewType="Lt">
      <DisplayFunction Shape="Bar" Id="122" Color="122,222,123,133" />
    </View>
  </GUIView>
  <GUIView ViewMode="Dual" Status="On">
    <View ViewType="Lt">
      <DisplayFunction Shape="Bar" Id="122" Color="122,222,123,133" />
    </View>
    <View ViewType="Lt">
      <DisplayFunction Shape="Bar" Id="122" Color="122,222,123,133" />
    </View>
  </GUIView>
</Views>

He escrito un método para completar el objeto que funciona para propiedades simples, pero necesito ayuda para completar la lista, este es mi método:

public static XElement FromXml(this XElement xe, object obj)
        {
            if (xe != null && xe.HasAttributes)
            {
                foreach (XAttribute attribute in xe.Attributes())
                {
                    try
                    {
                        PropertyInfo p = obj.GetType().GetProperty(attribute.Name.ToString());
                        if (p != null && p.CanWrite)
                        {
                            string s = attribute.Value;
                            if (s.Length > 0)
                            {
                                UpdateProperty(p, obj, s);
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        Log.Error("FromXml", ex);
                    }
                }
            }
            return xe;
        }

Cualquier idea sería genial, ya que lo he intentado pero no he podido encontrar las soluciones hasta ahora.

preguntado el 26 de abril de 12 a las 08:04

@Praveen: entonces, ¿qué es lo que no funciona aquí? -

1 Respuestas

Esto parece un buen candidato para la serialización/deserialización de XML. .NET tiene un conjunto de construido en clases que le permiten persistir un objeto (serializar) en XML y también crear una instancia de un objeto (deserializar) desde XML.

Le sugiero que lea sobre esto en MSDN y comience serializando una instancia de su clase en XML como un ejercicio de aprendizaje.

Hay un conjunto de atributos proporcionado por el marco que puede usar para ajustar la representación XML de su objeto.

Respondido 26 Abr '12, 08:04

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.