Tim*_*Tim 6 c# csv serialization
(我是一名C++程序员 - 试图学习C# - 而且似乎有一些内置的对象序列化 - 但我在这里有点缺水......)
我被要求将测试数据加载到CSV文件中的对象集合中.(CSV优于xml,因为它对人类来说更简单易读.我们正在创建测试数据来运行单元测试)
该集合将是(简单)对象的列表.
List<MyObject>
Run Code Online (Sandbox Code Playgroud)
MyObject是一个包含一些双精度和一些int的类.
这样做的首选方法是什么?我认为我不需要序列化其中一个对象.
我希望一行代表一个对象,文件中的行集用于制作列表/集合.
下面应该可以做到这一点,就在几个月前我正在研究的数据转换项目.
对于任何使用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);
}
}
}
}
Run Code Online (Sandbox Code Playgroud)