7

私はCSV Helperを使い始めています - あなたの毎日の仕事のための優れた小さなヘルパーです - 素晴らしいものです!

私が今苦労している項目の 1 つは、クラス マップです。小さなクラスがあります。

public class SimpleClass
{
    public int ID { get; set; }
    public string Name { get; set; }
    public decimal Percentage { get; set; }
    public bool IsValid { get; set; }
}

IsValidCSV にエクスポートするために、値trueyes,Falseに置き換えたいと思いnoます。そのために、クラス マップを作成しました。

public class SimpleClassMap : CsvClassMap<SimpleClass>
{
    public override void CreateMap()
    {
        Map(x => x.ID).Index(0);
        Map(x => x.Name).Index(1);
        Map(x => x.Percentage).Index(2);
        Map(x => x.IsValid).Index(3)
                           .TypeConverterOption(true, "yes")
                           .TypeConverterOption(false, "no");
    }
}

データをエクスポートするときは、そのクラス マップを使用しています。

CsvConfiguration config = new CsvConfiguration { Delimiter = ";", HasHeaderRecord = false, Quote = '"' };
config.RegisterClassMap<SimpleClassMap>();

using (MemoryStream stm = new MemoryStream())
using (var streamWriter = new StreamWriter(stm))
using (var csvWriter = new CsvWriter(streamWriter, config))
{
    csvWriter.WriteRecords(list);
    streamWriter.Flush();
}

残念ながら、書かれた内容を調べてみると、Trueor False- 期待どおりのyesorではないことがわかりますno.....

ここで何が欠けていますか?NuGet からインストールされた CSV-Helper v2.5 と .NET 4.0 / Visual Studio 2010 を使用しています。

4

2 に答える 2

17

ブール値のオーバーロードTypeConverterOptionは、読み取り時にのみ使用されます。読み取り時に true/false に使用できる複数の値を指定できます。したがって、、、、、、など1"true"実行できます"TRUE""True""yes"

現在、書き込み時にこれを行う唯一の方法は、カスタム型コンバーターを作成することです。

public class MyBooleanConverter : DefaultTypeConverter
{
    public override string ConvertToString( TypeConverterOptions options, object value )
    {
        if( value == null )
        {
            return string.Empty;
        }

        var boolValue = (bool)value;

        return boolValue ? "yes" : "no";
    }
}

その後、すべてのブール値にグローバルに適用できます。

CsvHelper.TypeConversion.TypeConverterFactory.AddConverter<bool>( new MyBooleanConverter() );

または、マッピングを介して単一のプロパティに適用します。

Map( m => m.MyBoolProperty ).TypeConverter<MyBooleanConverter>();
于 2014-04-10T20:48:03.433 に答える