【问题标题】:Mapping Class property in CsvHelperCsvHelper 中的映射类属性
【发布时间】:2021-05-24 09:59:17
【问题描述】:

我想知道在使用 CsvHelper 解析 csv 时如何映射类属性。例如 我的csv是这样的

,约翰,53 岁

地址, 123 st, CA90045

我的模型是这样的

public class Person
{
  public string Name {get;set;}
  public int Age {get;set;}
  public Address Address {get;set;}
}

public class Address
{
  public string Street {get;set;}
  public string Zip {get;set;}      
} 

那么我如何将 Person.Address 设置为 Address 中映射的值?

提前致谢

【问题讨论】:

  • 这真的是 CSV 吗?在 CSV 文件中,所有行都有相同的列。两行不能有不同的类型。
  • 看起来 CsvHelper 可以做的不仅仅是经典的 CSV。链接的示例显示了如何映射。这个例子有什么不清楚的地方?只需将FooBar 替换为PersonAddress
  • public class Foo { public int Id { get;放; } 公共字符串名称 { 获取;放; } 公共酒吧酒吧 { 得到;放; } } 在这种情况下, Bar 属性保持为空..

标签: c# csv csvhelper


【解决方案1】:

根据您链接到的示例,您必须进行一些额外的处理,因为 CSV 数据仅存储平面结构。分层数据不能用 Json 或 XML 表示。

假设您已正确完成映射部分,并且地址紧跟在下一个 CSV 行上的人

var persons = new List<Person>();
Person person;
while (csv.Read())
{
    switch (csv.GetField(0))
    {
        case "Person":
            person = csv.GetRecord<Person>();
            persons.Add(person);
            break;
        case "Address":
            Address address = csv.GetRecord<Address>();
            person.Address = address;
            break;
        default:
            throw new InvalidOperationException("Unknown record type.");
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-20
    相关资源
    最近更新 更多