FileHelper库 - 自定义错误消息

时间:2012-11-07 19:55:32

标签: filehelpers

我使用FileHelper来解析CSV文件。解析文件时遇到的错误消息将显示给最终用户。最终用户可能无法理解技术错误消息。没有太多的职员知道Int32是什么或Class: UploadFooDto

我想自定义错误消息,以便它们更加用户友好。类似的东西:

  • 第1行。第2列。输入字符串(a)而不是数字
  • 第2行。第3列。'13 -14-15'不是有效日期

我在API中找不到允许我自定义错误消息的任何内容。到目前为止,我所做的最多的是一些清理错误的扩展方法:

public static class FileHelperExceptionExtensions
{
    public static string BuildMessage(this ErrorInfo error)
    {
        if (error.ExceptionInfo is ConvertException)
        {
            return ((ConvertException)error.ExceptionInfo).BuildMessage();
        }

        if (error.ExceptionInfo is BadUsageException)
        {
            var message = error.ExceptionInfo.Message;
            var readTo = message.IndexOf("Class:");
            return message.Substring(0, readTo);
        }

        return string.Format("Line: {0}. An unspecific error occured.", error.LineNumber);
    }

    public static string BuildMessage(this ConvertException exception)
    {
        return string.Format("Line: {0}. Column: {1}. Field: {2}. Cannot convert '{3}' to type: '{4}'", exception.LineNumber, exception.ColumnNumber, exception.FieldName, exception.FieldStringValue, exception.FieldType.Name);
    }
}

但这些扩展仍然有很多不足之处。是否可以自定义错误消息?

1 个答案:

答案 0 :(得分:0)

很难改进你的扩展方法,除非它比它的价值更麻烦。

您无法继承默认转换器(例如,FileHelpers.ConvertHelpers.Int32Converter,因为它们是internalsealed)。您可以为每种类型创建自己的custom converter(并将其基于FileHelpers中的相应源代码,例如Int32Converter)。然后,您可以提出替代ConvertException(也sealed,以便您不能进行子类化),这会使消息格式化不同。