2016-09-08 7 views
0

FileHelpersでファイルを書き出すときにプロパティを抑制する方法はありますか?FileHelpersでファイルを書き出すときにプロパティを抑制する方法はありますか?

は、私は、オブジェクトを持っていると言う:

[DelimitedRecord(",")] 
public class MyClass 
{ 
    public int Field1 { get; set; } 
    public string Field2 { get; set; } 
    public string Field3 { get; set; } 
    public string Field4 { get; set; } 
    public string Field5 { get; set; } 
} 

私はcsvファイルを作成したいが、私は(関係なく、それが読み込まれます場合はありません)フィールド3を省略したいと思います。

Ex。
出力は次のようになります。Field1、Field2、Field4、Field5
FileHelpersでファイルの書き込みを抑制する属性がありますか?

答えて

0

文書herehereから、FieldValueDiscarded属性を使用します。

使用しないフィールドには、FieldValueDiscarded属性を使用してください。

あなたのレコードクラスが使用されていない、ライブラリは回避策として、この属性

+0

これは、プロパティではなくフィールドでのみ機能するようです。私はフィールドにプロパティを変換するときにエラーが発生するため、いくつかのものを使いこなす必要があります。私が使っているクラスには70以上のプロパティがあります。 – PrivateJoker

0

でマークされたフィールドの値を破棄しますいくつかのフィールドを持っている場合は、最後の区切り文字を削除するにはAfterWriteイベントを使用することができます。このようなもの:

[DelimitedRecord(",")] 
class Product : INotifyWrite 
{ 
    [FieldQuoted(QuoteMode.AlwaysQuoted)] 
    public string Name; 
    [FieldQuoted(QuoteMode.AlwaysQuoted)] 
    public string Description; 
    [FieldOptional] 
    public string Size; 

    public void BeforeWrite(BeforeWriteEventArgs e) 
    { 
     // prevent output of [FieldOptional] Size field 
     Size = null; 
    } 

    public void AfterWrite(AfterWriteEventArgs e) 
    { 
     // remove last "delimiter" 
     e.RecordLine = e.RecordLine.Remove(e.RecordLine.Length - 1, 1); 
    } 
} 

class Program 
{ 
    static void Main(string[] args) 
    { 
     var engine = new FileHelperEngine<Product>(); 
     var products = new Product[] { new Product() { Name = "Product", Description = "Details", Size = "Large"} }; 
     var productRecords = engine.WriteString(products); 
     try 
     { 
      // Make sure Size field is not part of the output 
      Assert.AreEqual(@"""Product"",""Details""" + Environment.NewLine, productRecords); 
      Console.WriteLine("All tests pass"); 
     } 
     catch (Exception ex) 
     { 
      Console.WriteLine("An error occurred"); 
      Console.WriteLine(ex); 
     } 

     Console.ReadKey(); 
    } 
} 
関連する問題