Tengo un atributo personalizado que aplico a las propiedades en una clase. Este atributo se usa para exportar las propiedades de la clase a un archivo plano.C# Cómo ordenar propiedades en una clase usando los atributos de propiedad personalizados
Una de las propiedades del atributo es FieldOrder. Necesito asegurarme de que el orden en el que exporto las propiedades de la clase sea correcto. Además, no todas las propiedades de la clase tendrán el atributo personalizado.
Encontré este artículo: How do I sort a generic list based on a custom attribute? Esta solución asume que todas las propiedades tienen el atributo personalizado, que no es mi caso. También esperaba una solución más elegante.
¡Su ayuda es muy apreciada!
public interface IFileExport{}
public class ExportAttribute: Attribute
{
public int FieldOrder { get; set; }
public int FieldLength { get; set; }
public ExportAttribute() { }
}
public class ExportClass: IFileExport
{
[ExportAttribute(FieldOrder = 2, FieldLength = 25)]
public string LastName { get; set; }
[ExportAttribute(FieldOrder=1, FieldLength=25)]
public string FirstName { get; set; }
[ExportAttribute(FieldOrder = 3, FieldLength = 3)]
public int Age { get; set; }
public ExportClass() { }
}
public class TestClass
{
public static List<PropertyInfo> GetPropertiesSortedByFieldOrder(IFileExport fileExport)
{
//get all properties on the IFileExport object
PropertyInfo[] allProperties = fileExport.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public);
//now I need to figure out which properties have the ExportAttribute and sort them by the ExportAttribute.FieldOrder
}
}
ACTUALIZACIÓN: estoy ordenando las propiedades de ExportAttribute.FieldOrder ascendente
Solo un pensamiento, pero tal vez sería más fácil hacer una serialización xml simple, y luego escribir una biblioteca para convertir el simple xml plano en un archivo plano. Sería reutilizable, y podría omitir todo este trabajo de configuración de atributos personalizados y reflexión. – asawyer