【问题标题】:Automatic mapping for public fields instead of properties公共字段而不是属性的自动映射
【发布时间】:2021-07-06 15:31:46
【问题描述】:

我的数据模型由公共字段而不是属性组成。我热衷于使用 CSVHelper 的自动映射将这些字段写入 .csv 文件。这适用于属性 - 但字段似乎被排除在外。

当我提供 ClassMap 时,下面的代码可以正常工作 - 但这似乎不方便重新:长期维护。有没有办法让它像属性一样自动映射字段?

void Main()
{
    var records = new List<Foo>
    {
        new Foo { Id = 1, Name = "one" },
    };
    
    using (var writer = new StreamWriter("path\\to\\file.csv"))
    using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
    {
        csv.Context.RegisterClassMap<FooMap>();
        csv.WriteRecords(records);
    }
}

public class Foo
{
    public int Id;
    public string Name;
}

public sealed class FooMap : ClassMap<Foo> {
    public TechMap() {
        AutoMap(CultureInfo.InvariantCulture);

        // I'm very keen to avoid having to map 
        // every field that's to be exported.
        Map(m => m.Id).Name("Id");
        Map(m => m.Name).Name("Name");
    }
}

【问题讨论】:

    标签: csvhelper


    【解决方案1】:

    这里的解决方案是将字段指定为成员类型。可以将自定义配置传递给CsvWriter 构造函数。

    var config = new CsvConfiguration(CultureInfo.InvariantCulture) {
        MemberTypes = MemberTypes.Fields
    };
    

    这就像一个魅力。

    【讨论】:

      猜你喜欢
      • 2017-12-09
      • 2010-11-13
      • 1970-01-01
      • 2021-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多