我正忙着对CSV文件进行序列化和反序列化,我想知道是否存在一个现有的库,它在概念上类似于XmlSerializer,它可以声明性地定义对象,并且(de)将它们序列化到文件或流中。我看了一下,但没有找到任何专注于序列化的东西。我已经有了非常可靠的代码来解析每个RFC 4180的CSV文档,但真正有用的是序列化部分。我不寻找的只是一个解析器,建议使用String.Split()等。
是否有现有项目,或者我应该建立一个项目?
奖金礼仪问题:如果我最终滚动自己的序列化程序,是否适合通过指向codeplex项目的链接回答这个问题?
答案 0 :(得分:18)
为此,我强烈推荐servicestack.text。 nuget上的Avialable:
Install-package servicestack.text
它支持许多数据格式的序列化,与内置的XmlSerializer不同,您不需要使用属性来装饰所有属性。以下是序列化为CSV的示例。
using ServiceStack.Text;
...
var csv = CsvSerializer.SerializeToCsv(new[]{
new Dog () {
Bark = "Woof!",
Male = true,
Size = 10
}});
答案 1 :(得分:5)
我过去曾使用this project (CsvHelper),它的工作方式类似于.NET序列化程序类中的构建,因为您使用属性来创建输入/输出。
真的没有必要自己动手,因为那里有很多。如果您最终自己滚动,请随意发布。大多数用户在用他们自己写的东西(或以某种方式附属)回答问题时,通常会给出免责声明,以表示礼貌。
答案 2 :(得分:1)
您应该查看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
}