(我是一名C ++程序员 - 试图学习C# - 看起来有一些内置的对象序列化 - 但我在这里有点失水......)
我被要求将测试数据加载到CSV文件中的对象集合中。 (CSV优于xml,因为它对人类来说更简单易读。我们正在创建测试数据来运行单元测试)
该集合将是(简单)对象的列表。
List<MyObject>
其中MyObject是一个包含几个双精度和几个整数的类。
这样做的首选方法是什么?我认为我不需要序列化其中一个对象。
我希望一行代表一个对象,文件中的一组行用于制作列表/集合。
答案 0 :(得分:7)
下面应该这样做,就在几个月前我正在研究的数据转换项目。
对于任何使用CSV(或任何字符分隔字符串)的人来说,你应该看一下使用适合它的特定库。我发现的最受欢迎的是下面(非常尝试和真实)
您将从string.Split(',')
开始,然后当有人在您的测试数据文件中意外抛出逗号时,您会怎么做? ......这只是噩梦之后的噩梦,这个图书馆遍布了大部分内容:
http://www.codeproject.com/KB/database/CsvReader.aspx?msg=3227161
using System.IO;
using LumenWorks.Framework.IO.Csv;
static class Program
{
public class MyObject
{
public int Prop1 { get; set; }
public string Prop2 { get; set; }
public decimal Prop3 { get; set; }
}
void ReadCsv()
{
//holds the property mappings
Dictionary<string, int> myObjectMap = new Dictionary<string, int>();
List<MyObject> myObjectList = new List<MyObject>();
// open the file "data.csv" which is a CSV file with headers
using (CsvReader csv = new CsvReader(new StreamReader("data.csv"), true))
{
int fieldCount = csv.FieldCount;
string[] headers = csv.GetFieldHeaders();
for (int i = 0; i < fieldCount; i++)
{
myObjectMap[headers[i]] = i; // track the index of each column name
}
while (csv.ReadNextRecord())
{
MyObject myObj = new MyObject();
myObj.Prop1 = csv[myObjectMap["Prop1"]];
myObj.Prop2 = csv[myObjectMap["Prop2"]];
myObj.Prop3 = csv[myObjectMap["Prop3"]];
myObjectList.Add(myObj);
}
}
}
}
答案 1 :(得分:4)
讨厌给出链接,但是这个链接有您正在寻找的确切样本:http://msdn.microsoft.com/en-us/library/bb513866.aspx#Y154