【问题标题】:Reference POCO object properties in CsvHelper在 CsvHelper 中引用 POCO 对象属性
【发布时间】:2020-05-14 18:34:03
【问题描述】:

我有一些在泛型方法中使用的嵌套类,定义如下;

基类:

public class Model
{
public int Id {get; set; }
public string Name {get; set; }
}

第 1 类:

public class Foo: Model
{
public string Description {get; set; }

    [Name("Parent")]
    [HeaderPrefix("z_Parent")]
public Foo ParentFoo {get; set; }
}

第 2 类:

public class Bar: Model
{
public Foo MyFoo {get; set; }
}

当我将 Foo 的实例导出到 CSV 时,我会从我传入的“Foo”实例以及“ParentFoo”的所有字段中获取字段。理想情况下,我只想拥有 ParentFoo.Name。同样,当我导出“Bar”的实例时,我希望字段“MyFoo”实际导出“MyFoo.Name”作为值。

我已经尝试过使用配置选项,我所能想到的就是将类设置为忽略引用,这在不包括所有父字段的情况下起作用,但也包括对父项的引用也不见了;

var csv = new CsvWriter(writeFile, CultureInfo.InvariantCulture);
csv.Configuration.IgnoreReferences = true;
csv.WriteRecords(Items);

有没有办法实现这一点,还是我应该考虑编写自己的 CSV 导出器?

TIA

【问题讨论】:

    标签: c# csv reflection csvhelper


    【解决方案1】:

    您可以使用ClassMap

    public sealed class FooClassMap : ClassMap<Foo>
    {
        public FooClassMap()
        {
            Map(m => m.Id);
            Map(m => m.Name);
            Map(m => m.Description);
            Map(m => m.ParentFoo.Name).Name("ParentName");
        }
    }
    
    var csv = new CsvWriter(writeFile, CultureInfo.InvariantCulture);
    csv.Configuration.RegisterClassMap<FooClassMap>();
    csv.WriteRecords(Items);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-11-06
      • 1970-01-01
      • 2016-10-09
      • 1970-01-01
      • 2011-08-25
      • 2021-12-15
      • 1970-01-01
      相关资源
      最近更新 更多