Referenciar propiedades de objetos

26/06/2007 - 04:48 por Geo | Informe spam
Tengo una clase que contiene muchas propiedades y necesito actualizar el
valor de algunas desde un archivo xml, por ejemplo:

class OrdenVenta {
... variables privadas ...

public string Id {
get { return _id; }
set { _id = value; }
}
public int Numero {
get { return _numero; }
set { _numero = value; }
}
... y tiene como 30 propiedades más ...
}

formato del archivo xml:
<OrdenVenta>
<Modificar campo="Numero" valor="45" />
<Modificar campo="Fecha" valor="25/06/2007" />
<Modificar campo="CodigoCliente" valor="MLT2384" />
... y así sucesivamente ...
</OrdenVenta>

Finalmente, se definió un objeto y se leyeron los campos y valores:

OrdenVenta miOrden = new OrdenVenta();
...
XmlReader reader = XmlReader.Create("configuracion.xml", settings);
...
campoNombre = reader.GetAttribute("campo");
campoValor = reader.GetAttribute("valor");
...

Ahora me gustaría evitar el código siguiente, en el que se tiene que
chequear cada propiedad:

if (campoNombre == "Numero")
miOrden.Numero = campoValor;
else if (campoNombre == "CodigoCliente")
miOrden.CodigoCliente = campoValor;

¿Hay alguna forma de hacer esto más eficientemente? Algún código como el
siguiente:

miOrden.Set(campoNombre, CodigoCliente);
...o...
miOrden[campoNombre] = CodigoCliente;

Gracias a todos!

Preguntas similare

Leer las respuestas

#1 Diego Jancic
26/06/2007 - 05:24 | Informe spam
Hola,
Porque no usas un reflection ?
Algo como:

MiClase objeto = new ...();

// Aca deberia comenzar un for...
PropertyInfo info = typeof(MiClase).GetProperty(campoNombre);

info.SetValue(objeto, castearValor(info.PropertyType, campoValor),
null);



Y para hacer el metodo castearValor tendrias que hacer algo como:

object castearValor(Type t, string valor)
{
if (t == typeof(int))
return int.Parse(valor);
if (t == typeof(double))
return double.Parse(valor);
if (t == typeof(string))
return valor;

return null;
}


De todas formas esto ultimo se puede hacer mejor si persistis el tipo
de la propiedad, pero creo que no vale la pena el esfuerzo...

Saludos,
Diego
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida