是否有CSV Serializer这样的东西?(类似于XmlSerializer)

Ste*_*ves 15 c# csv serialization

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

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

奖励礼仪问题:如果我最终滚动自己的序列化程序,是否适合用codeplex项目的链接回答这个问题?

Wil*_*unn 21

为此,我强烈推荐servicestack.text.nuget上的Avialable:

Install-package servicestack.text
Run Code Online (Sandbox Code Playgroud)

它支持许多数据格式的序列化,与内置的XmlSerializer不同,您不需要使用属性来装饰所有属性.这是一个序列化为CSV的示例.

using ServiceStack.Text;
...

var csv = CsvSerializer.SerializeToCsv(new[]{
    new Dog () {
    Bark = "Woof!",
    Male = true,
    Size = 10
}});
Run Code Online (Sandbox Code Playgroud)

  • 为了节省任何需要的时间,CSV的反序列化尚未在ServiceStack中实现.从最初的文档中可以看出这一点.它在待办事项清单上. (3认同)
  • 请注意,这是AGPL许可的. (3认同)
  • @RoyTinker 的评论也不再有效:[ServiseStack.Text 现在也完全免费用于商业用途](https://github.com/ServiceStack/ServiceStack/blob/master/docs/2016/v4.0.62.md #servicestacktext-is-now-free) (3认同)
  • @RoyTinker 在他们的论坛上我找到了一篇关于这个的帖子,他们还说它可以在没有许可证密钥的任何商业项目中免费使用:https://forums.servicestack.net/t/servicestack-text-license/2952 (3认同)
  • 我相信@ nick66的评论不再正确[请参见此处了解反序列化详细信息](https://github.com/ServiceStack/ServiceStack/wiki/CSV-Format#csv-deserialization-support) (2认同)

wsa*_*lle 5

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

真的没有必要自己动手,因为那里有很多.如果您最终自己滚动,请随意发布.大多数用户在用他们自己写的东西(或以某种方式附属)回答问题时,通常会给出免责声明,以表示礼貌.


Joã*_*elo 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 
} 
Run Code Online (Sandbox Code Playgroud)