我從nuget下載了FileHelpers,但我不確定這個功能是否存在,或者我沒有正確的版本或者什麼。有沒有辦法使用FileHelpers庫進行字段順序?
我一直looking around,似乎FileHelpers可能有一個屬性來指定字段順序。
我下載this one但是當我一直在尋找在的NuGet似乎有another version
我從nuget下載了FileHelpers,但我不確定這個功能是否存在,或者我沒有正確的版本或者什麼。有沒有辦法使用FileHelpers庫進行字段順序?
我一直looking around,似乎FileHelpers可能有一個屬性來指定字段順序。
我下載this one但是當我一直在尋找在的NuGet似乎有another version
首先,FieldOrder屬性不FileHelpers 2.0存在。在FileHelpers 2.9.9中(也可通過NuGet使用),該屬性存在,但如果您爲任何字段指定它,則必須爲所有字段指定它。但是,通常情況下,使用該屬性不是必需的,因爲字段的順序由格式定義。
當使用FileHelpers您提供一個類來描述您的格式,例如,
[DelimitedRecord("|")]
public class Order
{
// First field
public int OrderID;
// Second field
public string CustomerID;
// Third field
[FieldConverter(ConverterKind.Date, "ddMMyyyy")]
public DateTime OrderDate;
}
這描述了三個字段的格式,用豎線分隔。如果你喜歡,它的是格式的說明。一旦定義,你可以用它來導入和導出:
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);
所以,如果你想以不同的順序你的領域,你應該修改你的Order
類。
現在,如果你真的想,(用FileHelpers 2.9.9),你可以改變字段的順序如下:
[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;
}
,但它是清潔,以避免使用FieldOrder
屬性和相反,請修改類中字段的順序。
另一方面,如果您需要在運行時指定字段順序,則應使用runtime records構建Order
類。您可以使用string
Type orderType = ClassBuilder.ClassFromString(stringContainingOrderClassInCSharp);
FileHelperEngine engine = new FileHelperEngine(orderType);
Order[] orders = engine.ReadFile("FileIn.txt") as Order[];
或者你可以使用一個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[];
你可以用你爲了喜歡的任何邏輯來添加領域所需的順序。
有什麼區別? FileHelpers 2.9.9 - 這個版本似乎缺少這個屬性「FieldTitle」(我鏈接的鏈接之一) – chobo2 2012-01-12 16:54:27
FileHelpers 2.0.0.0在2005年到2007年之間開發,並且穩定並且有很多文檔。更新的版本2.9.9有更少的文檔,我不確定新功能是什麼。 'FieldTitle'已被'engine.HeaderText'屬性取代,您可以按照[鏈接的文章的答案](http://stackoverflow.com/a/4827625/1077279) – shamp00 2012-01-12 17:52:19
中的解釋進行設置,我也在尋找你的代碼,並意識到你不使用屬性。你不能使用屬性嗎?我發現自動屬性不適用於FieldOrder – chobo2 2012-01-12 17:57:07
根據bitbucket存儲庫中的代碼,它看起來像'FieldOrderAttribute'自03/02/2010以來一直存在,它比您安裝的軟件包早**多**。 – 2012-01-12 00:35:29
此外,更活躍的[SourceForge存儲庫](http://filehelpers.svn.sourceforge.net/viewvc/filehelpers/trunk/FileHelpers/Attributes/FieldOrderAttribute.cs?view=log)顯示該文件自至少2010年3月 – 2012-01-12 00:44:43
那麼nuget的方式已經過時了嗎? – chobo2 2012-01-12 01:41:46