该类型不存在于命名空间"指定自定义字段转换器时
本文关键字:自定义 字段 转换器 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();
}
}
}