我必须从以下网址读取CSV文件:http://somedomain.com/getdata.aspx?p1=param1&p2=param2
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(_serviceUrl);
HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
StreamReader sr = new StreamReader(resp.GetResponseStream());
CsvReader csvread = new CsvReader(sr, new CsvConfiguration()
{
});
List<Entity> record = csvread.GetRecords<Entity>().ToList();
sr.Close();
但我这样做没有运气
标题字段与<...>
一样:
<Field1>;<Field2>;<Field3>
和数据
stringValue;777;anotherStringValue
任何帮助?
答案 0 :(得分:1)
对我来说,解决方案是读取文件并将其映射到实体
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(_serviceUrl);
req.KeepAlive = false;
req.ProtocolVersion = HttpVersion.Version10;
HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
using (StreamReader streamReader = new StreamReader(resp.GetResponseStream()))
{
CsvConfiguration configuration = new CsvConfiguration()
{
Delimiter = ";",
HasHeaderRecord = true,
IsHeaderCaseSensitive = false
};
configuration.RegisterClassMap<EntityMap>();
CsvReader csvread = new CsvReader(streamReader, configuration);
List<Entity> record = csvread.GetRecords<Entity>().ToList();
}
并且有一个映射:
public class EntityMap : CsvClassMap<Entity>
{
public override void CreateMap()
{
Map(m => m.Field1).Name("<Field1>");
Map(m => m.Field2).Name("<Field2>");
}
}
答案 1 :(得分:0)
这里似乎有很多问题需要你处理。遗憾的是,您提供的信息非常少,您面临的确切问题以及申请中的哪些方面。
由于我不知道.NET框架中的CsvReader
类,所以我假设您正在寻找一个现有框架(或者已经在使用一个框架)。
至于你发布的代码片段,我建议将其分成几部分。比如,首先将文件加载到磁盘的某个临时位置,这样您就可以在完成工作后立即清理request/response
个对象。
我不确定当使用该ResponseStream时StreamReader的行为如何,在访问您可能没有足够访问权限的源时可能会出现更多麻烦。
将文件成功下载到有意义的位置后,您可以使用您想要使用的任何工具或框架来处理它。
根据CSV文件的复杂程度,此StackOverflow线程可能还提供了解析文件的一些灵感:Very simple C# CSV reader
应该有足够的互联网资源来帮助您开始您的单一步骤,例如:
下载文件:
Downloading a file via HTTP post and HTTP get in C#
这讨论了使用HttpWebRequest
获取文件以及如何将其保存到磁盘的两种备选方案;或Download Files from Web使用WebClient
类解释此内容。
解析CSV文件:
一个非常有用且功能强大的库:FileHelpers Library查看文档和示例以了解其工作原理。 Delimeted File Engine
可能正是您所需要的。或者查看LINQ to CSV library