技术频道导航
HTML/CSS
.NET技术
IIS技术
PHP技术
Js/JQuery
Photoshop
Fireworks
服务器技术
操作系统
网站运营
卡卡网是专业的网站测速平台,网速测试,测试网站速度,就来卡卡网 ~
问题反馈网络日志

【DiyVM】沙田机房/香港云/回国CN2线路/AMD EPYC/39元一月5M/CN2海外云主机 24元/月BGP+CN2海外云 低至25元/月海外主机 低至$2/月

DiyVM:香港VPS惊爆价36元一月
★站长变现★特色悬浮小图标广告
5M CN2 GIA云主机 24元起
【转化好产品,官方高价收量】
一一一云主机 26元起一一一
官方高价收量,每日稳定结算

一一云主机 24元 3折起一一
AWS核心代理U充值 免注册开户
海外CN2云 低至$2.5/月
海外云低至2折 298/年
免费测试★APK免杀 谷歌过保护
官方收量CPA/CPS长期稳定

海外主机 5M CN2 低至$2/月
恒创科技 一 海外服务器 ● 高速稳定
★解决安装报毒★谷歌过保护机制
CN2 GIA/1000Mbps $111/月
超级签★免杀★加固★满意付款
全球云主机 3天试用再买

【菠萝云】香港4G内存99元,马上开通
亿人互联-津/京BGP托管租用/VPS
苹果签名/APP封装/远控免杀
10M CN2海外云VPS 53元/月
一一站长/主播好变现一一有流量就来
站长变现 特色悬浮小图标广告

实力产品变现
实力产品变现
实力产品变现
实力产品变现
实力产品变现
实力产品变现

赞助商

分类目录

赞助商

最新文章

Windows 2012 不默认安装 .NET 3.5,需要此环境的人要手动添加...
在本文中,我将介绍如何在 .NET 中美化 JSON 字符串。
asp.net 的 @OutputCache 是以声明方式控制 ASP.NET ...
在本教程中,您将了解 System.IO,它是一个 C# 命名空间。此命名空间提...
在本文中,我将介绍C#如何清理JSON字符串里的HTML标签,同时把双引号变为单...
== 运算符和 Equals() 方法都用于比较两个值类型数据项或引用类型数据项...
为了比较变量之间的相等性,C# 提供了两种比较方法“==&rdquo...

搜索

C# CSV解析器TinyCsvParser使用示例:自定义映射

作者:admin    时间:2023-5-22 11:46:12    浏览:124

在前面文章中,我介绍了C# CSV解析器TinyCsvParser的一下使用示例,你可参阅:

在本文中,我将继续介绍TinyCsvParser使用示例:自定义映射。

自定义映射

在某些情况下,你可能需要以非 1:1 的方式将 CSV 列映射到输出实体的属性,或者你的输出实体可能包含其他非标量类型,你需要使用 CSV 行中的多个列来填充这些类型。这就是MapUsing发挥作用的地方。MapUsing 接受一个委托,该委托将为 CSV 中的每个非空、非注释行调用。对提供的委托的调用发生在为该行执行了所有MapProperty映射之后,因此你的实体可能在你的委托执行时部分填充了数据。

例子

首先,与任何其他映射一样,你需要建立CsvMapping<MyEntity>

  1. public class Person
  2. {
  3.     public string FirstName { get; set; }
  4.     public string LastName { get; set; }
  5. }
  6.  
  7. public class MyEntity
  8. {
  9.     public string OrderId { get; set; }
  10.     public Person Customer { get; set; }
  11. }
  12.  
  13. // CSV format: 1234,Doe,John
  14. public class MyMap : CsvMapping<MyEntity>
  15. {
  16.     public MyMap()
  17.     {
  18.         MapProperty(0, x => x.OrderId);
  19.         // TODO: Map person using MapUsing()
  20.     }
  21. }

添加MapUsing

现在我们将第一列映射到 OrderId,但是我们如何将第二列和第三列映射到我们Person类的实例呢? 使用MapUsing

  1. // CSV format: 1234,Doe,John
  2. public class MyMap : CsvMapping<MyEntity>
  3. {
  4.     public MyMap()
  5.     {
  6.         MapProperty(0, x => x.OrderId);
  7.         MapUsing((entity, values) =>
  8.         {
  9.             // TODO: Invalidate the row if first name is missing.
  10.  
  11.             var customer = new Person();
  12.  
  13.             // WARNING: IndexOutOfRangeException could happen here!!
  14.             customer.LastName = values.Tokens[1];
  15.             customer.FirstName = values.Tokens[2];
  16.  
  17.             entity.Customer = customer;
  18.  
  19.             return true;
  20.         });
  21.     }
  22. }

开始保护

现在我们的MyEntity类将正确填充订单 ID 和一个Person具有正确名字和姓氏集的实例。但是,如果我们遇到缺少名字的行,比如“1234,Acme Inc”,会发生什么情况?这是个坏消息,尤其是如果多行可能缺少第三列……每一行都会引发异常,这对解析性能非常不利。这就是为什么我们要求你的MapUsing委托返回一个布尔值,指示你映射的数据是否产生有效行。

注意:你应该避免做可能在你的委托中引发异常的事情,即使你使用try...catch,引发异常的事实会极大地减慢你的 CSV 解析速度,即使它被捕获并丢弃也是如此。

  1. // CSV format: 1234,Doe,John
  2. public class MyMap : CsvMapping<MyEntity>
  3. {
  4.     public MyMap()
  5.     {
  6.         MapProperty(0, x => x.OrderId);
  7.         MapUsing((entity, values) =>
  8.         {
  9.             // Checking that we have enough data and that the data is within range
  10.             // should happen before we try to access & map it below.
  11.             if(values.Tokens.Length < 3)
  12.             {
  13.                 return false;
  14.             }
  15.  
  16.             var customer = new Person();
  17.  
  18.             customer.LastName = values.Tokens[1];
  19.             customer.FirstName = values.Tokens[2];
  20.  
  21.             entity.Customer = customer;
  22.  
  23.             return true;
  24.         });
  25.     }
  26. }

总结

本文介绍了C# CSV解析器TinyCsvParser使用示例:自定义映射,你还可以参阅TinyCsvParser其他使用示例,请看文章:

相关文章

标签: asp.net  CSharp  CSV  TinyCsvParser  
x
广告: CN2云主机 免费试用