我正在玩弄序列化和反序列化CSV文件,我想知道是否有一个现有的库,在概念上类似于XmlSerializer,它可以声明性地定义对象并(反)序列化它们到文件或流。我环顾四周,但没有发现任何专注于序列化的内容。 我已经有了相当可靠的代码来解析每个 RFC 4180 的 CSV 文档,但真正有用的是序列化部分。我不在寻找的只是一个解析器,建议使用String.Split()等。
那里是否有一个现有的项目,或者我应该建立一个?
奖励礼仪问题:如果我最终推出了自己的序列化程序,是否适合用代码复合项目的链接来回答这个问题?
我强烈推荐servicestack.text用于此目的。在 nuget 上可用:
Install-package servicestack.text
它支持将序列化为多种数据格式,与内置的 XmlSerializer 不同,您无需使用属性修饰所有属性。下面是序列化为 CSV 的示例。
using ServiceStack.Text;
...
var csv = CsvSerializer.SerializeToCsv(new[]{
new Dog () {
Bark = "Woof!",
Male = true,
Size = 10
}});
我过去使用过这个项目(CsvHelper),它的工作方式类似于 .NET 序列化程序类中的构建,因为您使用属性来制作输入/输出。
真的没有必要自己滚动,因为那里有很多。如果您最终确实自己滚动,请随时发布它。大多数用户在用他们自己写的东西(或以某种方式隶属于)的东西回答问题时,通常会给出免责声明,以示礼貌。
你应该看看FileHelpers Library。
他们网站上的一些示例代码:
using FileHelpers;
// First declare the record class
[DelimitedRecord(",")]
public class SampleType
{
public string Field1;
public int Field2;
}
public void WriteExample()
{
FileHelperEngine engine = new FileHelperEngine(typeof(SampleType));
SampleType[] records = new SampleType[1];
records[0] = new SampleType();
records[0].Field1 = "Hello World";
records[0].Field2 = 12;
engine.WriteFile("destination.txt", records);
// Now the file contains the created record in this format:
//
// Hello World,12
}