我有一个任务,我必须读取csv文件并将内容写入c#List。 由于csv文件将来可以更改其布局(标题/顺序),我想使用配置文件来映射属性。
现在我想知道是否有一个例子,所以我不需要重新发明:D
我的数据源看起来像这样(制表符停止分隔)
Customer No. Customer Name Created Discount
10215 John Doe 2010-08-25 5050.23
我的班级是这样的:
Class Customer
{
string CustomerNo {get;set;}
string CustomerName {get;set;}
DateTime CreatedOn {get;set;}
decimal Discount {get;set;}
}
现在我想要一个带有定义的外部xml文件,这样我就可以在运行时修改它而无需重新编译代码。
<customermapping mapstoclass="my.namespace.Customer">
<attribute csvcaption="Customer No." mapstoproperty="CustomerNo"
typeof="System.String" required="true">
<attribute csvcaption="Customer Name" mapstoproperty="CustomerName"
typeof="System.String" required="true">
<attribute csvcaption="Created" mapstoproperty="CreatedOn"
typeof="System.DateTime" required="false">
<attribute csvcaption="Discount" mapstoproperty="Discount"
typeof="System.Decimal" required="false">
</customermapping>
在一天结束时,我想做以下事情: (我已经可以读取csv文件中的所有值(第一行是标题,并且是一个单独的数组)
List<Customer> customers =
CreateCustomerList(string[] csvCaptions, string[] csvLines,
"c:\customermapping.xml");
不应该变得复杂,但正如我所说,如果某人已经做过类似的事情,欢迎任何例子。
答案 0 :(得分:0)
看起来你想重新发明xsd架构。如果您可以更改格式,请使用xml并在xml中定义该规则。
如果您无法更改格式或数据太大而无法很好地适应xml,我猜您自己就是这样。 CSV不是一种特殊的格式我认为没有任何机构可以为它创建架构验证。
答案 1 :(得分:0)
您可能需要考虑使用LINQ。这里有关于LINQ to TEXT的文章:
更新:我已经重新阅读了您的问题,我不再确定使用LINQ是否真的有助于解决您的问题,但我会在这里留下答案以防万一
如果你可以提供任何帮助,我会把关于哪些列映射到代码中的哪些属性而不是xml文件中的逻辑。