该类型不存在于命名空间"指定自定义字段转换器时

本文关键字:自定义 字段 转换器 quot 不存在 类型 命名空间 | 更新日期: 2023-09-27 18:12:41

我试图使用我的自定义转换器与FileHelpers v. 3.1.5后尝试:

classBuilder.LastField.Converter.TypeName = typeof(NoValueConverter).ToString();

我得到"无法找到类型或命名空间名称'DN' "。当我尝试指定自定义转换器的名称空间时:

classBuilder.Namespace = "DN.CustodianDataImport.Parsers";
classBuilder.LastField.Converter.TypeName = typeof(NoValueConverter).ToString();

它扔:类型或命名空间名称'NoValueConverter'在命名空间'DN.CustodianDataImport '中不存在。解析器

当我只指定ConverterType时,代码工作正常:

classBuilder.LastField.Converter.Kind = ConverterKind.Double;

但是我需要做的是告诉解析器将"N/A"视为null,而不是抛出错误将'N/A'转换为类型:'Double'

任何想法?

该类型不存在于命名空间"指定自定义字段转换器时

尝试使用typeof(NoValueConverter).FullName代替ToString(),它可能只给出类名而没有完整的命名空间前缀。

编辑:

我现在已经确认ToString()绝对不是使用一个有效的名称:

public override ToString()
{
    return ("Type: " + name);
}

你这样做对我来说很好(甚至没有指定classBuilder.Namespace)。

下面是一个工作示例:

using System;
using FileHelpers;
using FileHelpers.Dynamic;
using System.Data;
using NUnit.Framework;
namespace OtherNameSpace
{
    public class MyConverter : ConverterBase
    {
        public override object StringToField(string from)
        {
            return from;
        }
    }
}
namespace ConsoleApplication1
{
    class Program
    {
        private static void Main(string[] args)
        {
            var cb = new DelimitedClassBuilder("Customer", ",");
            cb.AddField("SomeField", typeof(String));
            cb.LastField.Converter.TypeName = typeof(OtherNameSpace.MyConverter).ToString();
            Type recordClass = cb.CreateRecordClass();
            var engine = new FileHelperEngine(recordClass);
            var records = engine.ReadStringAsDT("aaa");
            Assert.AreEqual("aaa", records.Rows[0].Field<string>(0));
            Console.WriteLine("All OK");
            Console.ReadKey();
        }
    }
}