使用Filehelpers库忽略十进制字段中的美元货币符号($)

时间:2014-08-13 10:12:37

标签: c# filehelpers

假设我有一个像这样的Filehelpers类:

[DelimitedRecord(",")]
public class SomeRecord
{
    public string Field1;
    public decimal Field2;
}

如果我尝试导入这样的CSV记录:

hello,$4.00

我收到FileHelpers.ConvertException:“错误转换'$ 4.00'到类型:'十进制'。”

如何让Filehelpers忽略$ sign?

1 个答案:

答案 0 :(得分:5)

我认为您需要编写自己的转换器并将该转换器用于Field2。这并不困难,您需要做的就是创建一个扩展ConverterBase的类。例如:

public class CurrencyConverter : ConverterBase
{
    private NumberFormatInfo nfi = new NumberFormatInfo();

    public CurrencyConverter()
    {
        nfi.NegativeSign = "-";
        nfi.NumberDecimalSeparator = ".";
        nfi.NumberGroupSeparator = ",";
        nfi.CurrencySymbol = "$";
    }

    public override object StringToField(string from)
    {
        return decimal.Parse(from, NumberStyles.Currency, nfi);
    }
}

然后,您可以在Field2媒体资源上使用该转换器:

[DelimitedRecord(",")]
public class SomeRecord
{
    public string Field1;
    [FieldConverter(typeof(CurrencyConverter))]
    public decimal Field2;
}

,$ 4.00将被解析为4.00。

很明显,我上面的代码并不那么强大。您可能更愿意使用TryParse而不仅仅是Parse并返回0如果失败但您明白了。