为了账号安全,请及时绑定邮箱和手机立即绑定

从csv读取到对象[] C#

从csv读取到对象[] C#

C#
凤凰求蛊 2021-10-24 17:56:29
我正在尝试从 .csv 文件读取到对象数组。这里还有其他解决方案可以为列表提供解决方案,但我似乎无法让它对我有用。对象定义:public class DTOClass{    //declare data members    [DataMember]    public DateTime Date { get; set; }    [DataMember]    public string stock_symbol { get; set; }    [DataMember]    public double stock_price_open { get; set; }    [DataMember]    public double stock_price_close { get; set; }    [DataMember]    public double stock_price_low { get; set; }    [DataMember]    public double stock_price_high { get; set; }    [DataMember]    public double stock_price_adj_close { get; set; }    [DataMember]    public long stock_volume { get; set; }    [DataMember]    public string stock_exchange { get; set; }}实例声明:private DTOClass[] _dTOs;过滤方式:private List<DTOClass> FromCsv(string csvLine, List<DTOClass> rest){    DataTable _dt = new DataTable();    string[] values = csvLine.Split(',');    int j = _dt.Rows.Count;    for (int i = 0; i < j; i++)    {        DTOClass dto = new DTOClass();        dto.Date = Convert.ToDateTime(values[0]);        dto.stock_symbol = Convert.ToString(values[1]);        dto.stock_price_open = Convert.ToDouble(values[2]);        dto.stock_price_close = Convert.ToDouble(values[3]);        dto.stock_price_low = Convert.ToDouble(values[4]);        dto.stock_price_high = Convert.ToDouble(values[5]);        dto.stock_price_adj_close = Convert.ToDouble(values[6]);        dto.stock_volume = Convert.ToInt64(values[7]);        dto.stock_exchange = Convert.ToString(values[8]);        rest.Add(dto);    }    return rest;}调用过滤器:DTO = File.OpenText(Filename).ReadLine().Select(v => FromCsv(v.ToString(), _restDto)).ToArray();我需要它返回到一个对象数组,因为它然后进入数据网格上的 CollectionView。但我不断收到此错误:“无法将类型 'System.Collections.Generic.List[]' 隐式转换为 'MBM.Services.DTOClass[]'”我知道我显然是在返回一个列表列表,但是我已经尝试了其他提供的方法,我只是被难住了。
查看完整描述

2 回答

?
DIEA

TA贡献1820条经验 获得超2个赞

一种简单的方法是拆分线条并将它们选择到您的新对象中。


var result = File.ReadAllLines("pathTo.csv")

                .Select(line => line.Split(','))

                .Select(x => new MyObject { 

                    prop1 = x[0],

                    prop2 = x[1],

                    //etc.. 

                })

                .ToArray();


查看完整回答
反对 回复 2021-10-24
?
动漫人物

TA贡献1815条经验 获得超10个赞

重新创建轮子没有意义,我只是使用CsvHelper,它支持您正在做的事情,除了处理格式错误的 CSV 之外,您还可以像这样设置映射:


public sealed class MyClassMap : ClassMap<MyClass>

{

    public MyClassMap()

    {

        AutoMap();

        Map( m => m.CreatedDate ).Ignore();

    }

}

然后你可以像这样获得对象:


var csv = new CsvReader( textReader );

var records = csv.GetRecords<MyClass>();


查看完整回答
反对 回复 2021-10-24
  • 2 回答
  • 0 关注
  • 341 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信