15

我正在玩弄 CSV 文件的序列化和反序列化,我想知道是否有一个现有的库,在概念上类似于 XmlSerializer,它可以声明性地定义对象并将它们(反)序列化到/从文件或流中。我环顾四周,但没有发现任何专注于序列化的东西。我已经有非常可靠的代码来解析每个 RFC 4180 的 CSV 文档,但真正有用的是序列化部分。我想要的只是一个解析器,使用 String.Split() 的建议等。

那里有现成的项目,还是我应该建立一个?

额外的礼仪问题:如果我最终推出了自己的序列化程序,是否适合用 codeplex 项目的链接来回答这个问题?

4

3 回答 3

25

为此,我强烈推荐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
}});
于 2014-08-03T09:36:25.403 回答
5

我过去曾使用过这个项目 (CsvHelper),它的工作方式类似于 .NET 序列化程序类中的构建,因为您使用属性来制作输入/输出。

真的没有必要自己动手,因为那里有很多。如果您最终自己滚动,请随时发布。大多数用户在用他们自己(或以某种方式关联)编写的内容回答问题时,通常会出于礼貌而给出免责声明。

于 2012-06-20T16:34:23.997 回答
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 
} 
于 2012-06-20T16:33:37.573 回答