Mediante el uso de la reflexión puede recuperar las informaciones de propiedad de un objeto
foreach (PropertyInfo prp in obj.GetType().GetProperties()) {
if (prp.CanRead) {
object value = prp.GetValue(obj, null);
string s = value == null ? "" : value.ToString();
string name = prp.Name;
...
}
}
El método GetProperties
tiene una sobrecarga aceptar BindingFlags
a través del cual se puede determinar qué tipo de propiedad que necesita, como privada instancia/public/estática .
Puedes combinarlos como esto
var properties = type.GetProperties(BindingFlags.Public |
BindingFlags.NonPublic |
BindingFlags.Instance);
Aplicado a su problema podría escribir
List<Person> people = ...;
Type type = typeof(Person);
PropertyInfo[] properties = type.GetProperties();
var sb = new StringBuilder();
// First line contains field names
foreach (PropertyInfo prp in properties) {
if (prp.CanRead) {
sb.Append(prp.Name).Append(';');
}
}
sb.Length--; // Remove last ";"
sb.AppendLine();
foreach (Person person in people) {
foreach (PropertyInfo prp in properties) {
if (prp.CanRead) {
sb.Append(prp.GetValue(person, null)).Append(';');
}
}
sb.Length--; // Remove last ";"
sb.AppendLine();
}
File.AppendAllText("C:\Data\Persons.csv", sb.ToString());
También es una buena idea para encerrar las cadenas entre comillas dobles y para escapar de dobles citas que contienen al doblarlas.
valores de qué? –
Su pregunta necesita más antecedentes y ejemplos de datos/códigos para evitar ser un candidato para el cierre. –
¿Puede mostrarnos lo que ya ha intentado? – LolCat