忽略FileHelpers中的属性

问题描述 投票:6回答:4

我使用FileHelpers将模型导出为CSV。它有一个[FieldNotInFile()]属性,在导出时排除字段,但我需要使用属性,因为我需要一些其他属性以及另一个仅使用属性的第三方库。

有没有办法让FileHelpers忽略属性?

c# attributes filehelpers
4个回答
4
投票

前几天我遇到了同样的问题并使用了[FieldHidden]属性。像这样的东西:

[DelimitedRecord("\t")]
public class PolicyFileRecord
{
    public string FileDate;
    public int ProgramId;
    public string LocationAddress1;
    public string LocationAddress2;
    public string LocationAddress3;
    public string LocationCity;
    public string LocationState;
    public string LocationZip;

    [FieldHidden] 
    public string LocationCountry;
}

1
投票

我通过给属性一个支持字段并将支持字段标记为[FieldHidden]来实现此目的:

[DelimitedRecord(",")]
public class Record
{
    public int Id;
    public string Name;

    public string SomeProperty
    {
        get { return someProperty; }
        set { someProperty = value; }
    }

    [FieldHidden]
    private string someProperty;
}

1
投票

从版本3.27开始,您可以在字段AND属性上使用[FieldHidden]。


0
投票

FileHelpers类只是使用有限的C#语法作为定义语言来定义平面文件规范的一种方法。因此,FileHelpers类是一种不常见的C#类,您不应该尝试以任何其他方式使用它们。将FileHelpers类视为CSV格式的“规范”。这应该是它唯一的作用。如果您需要更“正常”对象中的记录(在您的情况下,您需要属性而不是字段),那么将结果映射到更好的方式:

FileHelperEngine engine = new FileHelperEngine<FileHelpersOrder>(); 
var records = engine.ReadFile("FileIn.txt");

var niceOrders = records.Select(
    x => new NiceOrder() 
       { Number = x.Number,  
         Customer = x.Customer 
         // etc.
       });

其中FileHelpersOrder是您的CSV规范,NiceOrder类将是一个适当的OOP类,其中包含必要的属性,方法等。

如果你是出口,那么你需要做相反的事情,即从FileHelpersOrder的集合中选择NiceOrder的集合。

© www.soinside.com 2019 - 2024. All rights reserved.