.net使用xml将csv映射到类

时间:2010-08-26 07:30:49

标签: c# xml csv mapping

我有一个任务,我必须读取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");

不应该变得复杂,但正如我所说,如果某人已经做过类似的事情,欢迎任何例子。

2 个答案:

答案 0 :(得分:0)

看起来你想重新发明xsd架构。如果您可以更改格式,请使用xml并在xml中定义该规则。

如果您无法更改格式或数据太大而无法很好地适应xml,我猜您自己就是这样。 CSV不是一种特殊的格式我认为没有任何机构可以为它创建架构验证。

答案 1 :(得分:0)

您可能需要考虑使用LINQ。这里有关于LINQ to TEXT的文章:

更新:我已经重新阅读了您的问题,我不再确定使用LINQ是否真的有助于解决您的问题,但我会在这里留下答案以防万一

如果你可以提供任何帮助,我会把关于哪些列映射到代码中的哪些属性而不是xml文件中的逻辑。