objetos objeto instanciar forma dinamicamente dinamica crear c# c#-4.0 dynamic expandoobject

c# - objeto - Agregando dinĂ¡micamente propiedades a un ExpandoObject



crear objetos dinamicamente c# (3)

Aquí hay una clase auxiliar de ejemplo que convierte un Objeto y devuelve un Expando con todas las propiedades públicas del objeto dado.

public static class dynamicHelper { public static ExpandoObject convertToExpando(object obj) { //Get Properties Using Reflections BindingFlags flags = BindingFlags.Public | BindingFlags.Instance; PropertyInfo[] properties = obj.GetType().GetProperties(flags); //Add Them to a new Expando ExpandoObject expando = new ExpandoObject(); foreach (PropertyInfo property in properties) { AddProperty(expando, property.Name, property.GetValue(obj)); } return expando; } public static void AddProperty(ExpandoObject expando, string propertyName, object propertyValue) { //Take use of the IDictionary implementation var expandoDict = expando as IDictionary; if (expandoDict.ContainsKey(propertyName)) expandoDict[propertyName] = propertyValue; else expandoDict.Add(propertyName, propertyValue); } }

Uso:

//Create Dynamic Object dynamic expandoObj= dynamicHelper.convertToExpando(myObject); //Add Custom Properties dynamicHelper.AddProperty(expandoObj, "dynamicKey", "Some Value");

Me gustaría agregar dinámicamente propiedades a un ExpandoObject en tiempo de ejecución. Por ejemplo, para agregar una propiedad de cadena llamada NewProp, me gustaría escribir algo como

var x = new ExpandoObject(); x.AddProperty("NewProp", System.String);

¿Es esto posible fácilmente?



dynamic x = new ExpandoObject(); x.NewProp = string.Empty;

Alternativamente:

var x = new ExpandoObject() as IDictionary<string, Object>; x.Add("NewProp", string.Empty);