En primer lugar, el atributo FieldOrder no existe en FileHelpers 2.0. En FileHelpers 2.9.9 (también disponible a través de NuGet), el atributo existe, pero si lo especifica para cualquier campo, debe especificarlo para todos los campos. En general, sin embargo, el uso del atributo no es necesario, ya que el orden de los campos está definido por el formato.
Al utilizar FileHelpers usted proporciona una clase para describir su formato, por ejemplo,
[DelimitedRecord("|")]
public class Order
{
// First field
public int OrderID;
// Second field
public string CustomerID;
// Third field
[FieldConverter(ConverterKind.Date, "ddMMyyyy")]
public DateTime OrderDate;
}
Esto describe un formato con tres campos, separados por barras verticales. Si lo desea, es la especificación del formato. Una vez definido que se puede utilizar para importar y exportar:
FileHelperEngine engine = new FileHelperEngine(typeof(Order));
// To read use:
Order[] orders = engine.ReadFile("FileIn.txt") as Order[];
// To write use:
engine.WriteFile("FileOut.txt", orders);
Por lo tanto, si desea que sus campos en un orden diferente, debe modificar su clase Order
.
Ahora si realmente querían, (con FileHelpers 2.9.9), se puede cambiar el orden de los campos de la siguiente manera:
[DelimitedRecord("|")]
public class Order
{
// Third field
[FieldOrder(3)]
public int OrderID;
// Second field
[FieldOrder(2)]
public string CustomerID;
// First field
[FieldOrder(1)]
[FieldConverter(ConverterKind.Date, "ddMMyyyy")]
public DateTime OrderDate;
}
pero es más limpio para evitar el uso del atributo y FieldOrder
modifique el orden de los campos dentro de la clase en su lugar.
Por otro lado, si necesita especificar el orden de los campos en tiempo de ejecución, debe compilar la clase Order
utilizando runtime records. Puede utilizar un string
Type orderType = ClassBuilder.ClassFromString(stringContainingOrderClassInCSharp);
FileHelperEngine engine = new FileHelperEngine(orderType);
Order[] orders = engine.ReadFile("FileIn.txt") as Order[];
O puede utilizar una ClassBuilder
:
DelimitedClassBuilder cb = new DelimitedClassBuilder("Order");
// First field
cb.AddField("OrderID", typeof(int));
// Second field
cb.AddField("CustomerID", 8, typeof(string));
// Third field
cb.AddField("OrderDate", typeof(DateTime));
cb.LastField.Converter.Kind = ConverterKind.Date;
cb.LastField.Converter.Arg1 = "ddMMyyyy";
engine = new FileHelperEngine(cb.CreateRecordClass());
Order[] orders = engine.ReadFile("FileIn.txt") as Order[];
Usted puede usar cualquier lógica te gusta con el fin de añadir sus campos en el orden necesario.
Según el código en el repositorio bitbucket, parece que 'FieldOrderAttribute' ha estado allí desde el 03/02/2010, que es ** mucho ** anterior al paquete que ha instalado. –
También el más activo [repositorio de SourceForge] (http://filehelpers.svn.sourceforge.net/viewvc/filehelpers/trunk/FileHelpers/Attributes/FieldOrderAttribute.cs?view=log) muestra que el archivo existe desde al menos marzo de 2010 –
¿Entonces los nuget están desactualizados entonces? – chobo2