C# FileHelper ReadFile()返回null
我正在使用很棒的FileHelpers库版本2.9.9。然而,我已经被困了几个小时,我无法解决这个问题。我想将文件加载到CustomerClass对象的数组中。我想利用DelimitedClassBuilder动态更改字段的顺序。我在Stackoverflow上找到了一个答案,它展示了如何做到这一点。即使按照这个答案,我也做不到。但是,如果我直接将该类与FileHelperEngine而不是DelimitedClassBuilder一起使用,它就可以正常工作。谁能帮我一下吗 这是我想从csv文件创建一个数组的对象:C# FileHelper ReadFile()返回null,c#,filehelpers,C#,Filehelpers,我正在使用很棒的FileHelpers库版本2.9.9。然而,我已经被困了几个小时,我无法解决这个问题。我想将文件加载到CustomerClass对象的数组中。我想利用DelimitedClassBuilder动态更改字段的顺序。我在Stackoverflow上找到了一个答案,它展示了如何做到这一点。即使按照这个答案,我也做不到。但是,如果我直接将该类与FileHelperEngine而不是DelimitedClassBuilder一起使用,它就可以正常工作。谁能帮我一下吗 这是我想从csv文件
[DelimitedRecord(";")]
public class CustomerClass
{
public string CustomerId;
public string FirstName;
public string LastName;
}
这是我用来创建数组的代码:
public void ReadFile()
{
DelimitedClassBuilder cb = new DelimitedClassBuilder("CustomerClass", ";");
cb.AddField("CustomerId", typeof(string));
cb.AddField("FirstName", typeof(string));
cb.AddField("LastName", typeof(string));
FileHelperEngine engine = new FileHelperEngine(cb.CreateRecordClass());
engine.ErrorMode = ErrorMode.IgnoreAndContinue;
string filename = @"C:\temp\customerfile.csv";
DataTable dt = engine.ReadFileAsDT(filename); // Works fine
object[] test = engine.ReadFile(filename) as object[]; // Works fine
CustomerClass[] customers = engine.ReadFile(filename) as CustomerClass[]; // Returns null (probably because the 'cast' is invalid, see line below)
customers = (CustomerClass[])engine.ReadFile(filename); // Throws InvalidCastException (Unable to cast object of type 'CustomerClass[]' to type 'MyNamespace.CustomerClass[]'.)
}
以下是文件内容:
客户ID;名字;姓氏
一,;詹姆斯;棕色的
二,;罗伯特;磨坊主
三,;大卫;绿色的
请尝试完全限定的类名:
DelimitedClassBuilder cb=新DelimitedClassBuildererMyNameSpace.CustomerClass 根据您提供的评论,我建议使用以下内容:
var customers = engine.ReadFile(filename)
.Cast<*type of the class coming back from ReadFile*>()
.Select(c => new MyNamespace.CustomerClass()
{
CustomerId = c.CustomerId,
FirstName = c.FirstName,
LastName = c.LastName
})
.ToArray();
您将需要提供从engine.ReadFile返回给Cast调用的类的类型。调用Select将为每个返回的客户创建一个CustomerClass实例。项目中是否有多个不同名称空间的CustomerClass?如果使用var customers=engine.readfilefilefilename;,结果如何;。客户解析为什么类型?阵列中的类型是什么?它们显然是对象,但其中存储的是什么类型?该类型没有解析为对象它解析为CustomerClass,而是与我的CustomerClass不同的CustomerClass,因为此CustomerClass是使用DelimitedClassBuilder动态构造的。它包含4个对象。对象名是CustomerId、FirstName和LastName。我已经试过了。这会引发异常:字符串“MyNamespace.CustomerClass”不是有效的.NET标识符。我还尝试使用cb.NameSpace=MyNamespace.CustomerClass,这也会引发InvalidCastException…CustomerClass在同一个项目中吗?如果没有,您还需要指定程序集。CustomerClass在同一个项目中。我不知道。我试图查找库的源代码,但它在工作时被阻止。这也会引发invalidcast:无法将类型为“CustomerClass”的对象强制转换为类型为“MyNamespace.CustomerClass”。至于void,这只是我构造的一个简单示例,方法看起来非常不同。我只是想确保这个简单的小示例能够正常工作……我要说的是,CustomerClass是从ReadFile和MyNamespace的调用中产生的。CustomerClass是您想要的吗?是的,这是正确的。我试图将正确的命名空间添加到cb.namespace属性,但这也会导致无效的强制转换。感谢提供的解决方案,我知道我的问题有解决方法,我一直在寻找一个利用FileHelpers库的解决方案,因为在谷歌搜索时,似乎有其他人已经成功地建立了这样一个解决方案…谢谢你的新建议!我试过了,但不幸的是,这也产生了一个无效的例外。目前,我正在使用数组对象中的反射来访问数据。