【问题标题】:Reading CsvReader field text field into Boolean field?将 CsvReader 字段文本字段读入布尔字段?
【发布时间】:2021-12-30 16:15:49
【问题描述】:

我刚开始使用CsvReader,而且进展顺利。

我的对象目前有这些字段:

public class CLMExplorerStudent
{
    [Name("Student ID")]
    public int Id { get; set; }

    [Name("Last Name")]
    public string LastName { get; set; }

    [Name("First Name")]
    public string FirstName { get; set; }

    [Name("Gender")]
    public string Gender { get; set; }

    [Name("Active")]
    public string Active { get; set; }

    [Name("Role")]
    public string Role { get; set; }

    [Name("Use For")]
    public string UseFor { get; set; }

    [Name("Use Where")]
    public string UseWhere { get; set; }

    [Name("Email Address")]
    public string EmailAddress { get; set; }

    [Name("Phone #")]
    public string PhoneNumber { get; set; }

    [Name("Remarks")]
    public string Remarks { get; set; }
}

Active 字段在 CSV 文件中的值为 YN。是否可以映射它以便我的类中的属性可以是bool 属性?

我正在使用标准方法读取 CSV 文件:

using (var reader = new StreamReader(strPath))
using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
{
    var records = csv.GetRecords<CLMExplorerStudent>();
}

我显然知道我可以简单地针对YN 测试该值,但我更愿意读入bool 属性。

我只需要从 CSV 文件中读入而不是写出它。

【问题讨论】:

标签: c# boolean csvreader


【解决方案1】:

实现一个自定义类型转换器并使用[TypeConverter]属性注册它:

using CsvHelper.Configuration;
using CsvHelper.Configuration.Attributes;
using CsvHelper.TypeConversion;

class YesNoConverter : DefaultTypeConverter
{
    public override object ConvertFromString(string text, IReaderRow row, MemberMapData memberMapData)
        => "YES".StartsWith(text, StringComparison.OrdinalIgnoreCase);
    

    public override string ConvertToString(object value, IWriterRow row, MemberMapData memberMapData)
        => value is bool b && b ? "Y" : "N";
}

public class CLMExplorerStudent
{
    // ...

    [Name("Active")]
    [TypeConverter(typeof(YesNoConverter))]
    public bool Active { get; set; }

    // ...
}

【讨论】:

  • 谢谢。我会说你的代码中的string Active 需要更改为bool Active 是对的吗?
  • @AndrewTruckle 正确!
  • 查看我刚刚添加的答案。
【解决方案2】:

我还发现了这个页面:https://joshclose.github.io/CsvHelper/examples/configuration/attributes/

建议的地方:

[BooleanTrueValues("yes")]
[BooleanFalseValues("no")]
public bool IsBool { get; set; }

所以:

[BooleanTrueValues("Y")]
[BooleanFalseValues("N")]
public bool Active{ get; set; }

【讨论】:

    猜你喜欢
    • 2011-08-28
    • 1970-01-01
    • 1970-01-01
    • 2021-08-11
    • 1970-01-01
    • 1970-01-01
    • 2010-12-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多