2012-06-20 28 views
8

我在序列化和反序列化CSV文件,我想知道是否有一個現有的庫,在概念上類似於XmlSerializer,它可以聲明性地定義對象和(德)序列化他們/從一個文件或流。我查了一下,但沒有發現任何關於序列化的內容。我已經有了非常穩定的代碼來解析每個RFC 4180的CSV文檔,但是真正有用的是序列化部分。我所尋找只是一個解析器,建議使用String.Split()等有沒有像CSV序列化程序那樣的東西? (類似於XmlSerializer)

有一個現有的項目在那裏,或者我應該建立一個?

獎金禮儀問題:如果我最終滾動自己的序列化程序,是否適合通過指向codeplex項目的鏈接回答此問題?

+0

可能重複http://stackoverflow.com/questions/1179816/best-practices-for-serializing-objects- to-a-custom-string-format-for-an-o- –

+0

爲了重申和強調我原來的問題的一部分,我對簡單地遍歷列表和用逗號連接字符串不感興趣。該問題特別涉及聲明性定義對象(使用XmlElementAttribute類似地完成),然後基於這些聲明執行(反)序列化。 –

回答

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 
} 
5

我已經在過去使用this project (CsvHelper),並在您使用屬性工藝的投入感的工作原理類似於構建.NET串行類/輸出。

真的沒有必要推出自己的,因爲有噸。如果你最終決定自己動手,請隨時發佈。大多數用戶在回答一個他們自己寫的東西(或者以某種方式附屬的東西)的問題時,通常會給出一個免責聲明,以作爲禮貌。

13

爲此我強烈建議servicestack.text。可用的編緝上的NuGet:

Install-package servicestack.text 

它suports系列化很多數據格式和不同的是建於XmlSerializer的,你不需要用屬性來裝飾您的所有屬性。這裏是一個序列化爲CSV的例子。

using ServiceStack.Text; 
... 

var csv = CsvSerializer.SerializeToCsv(new[]{ 
    new Dog() { 
    Bark = "Woof!", 
    Male = true, 
    Size = 10 
}}); 
的[序列化對象的自定義串格式用在一個輸出文件中的最佳實踐(
+2

爲了節省任何需要的人,CSV的反序列化尚未在ServiceStack中實現。這從最初的文檔中並不清楚。它在待辦事項列表中。 – nick66

+1

注意這是AGPL許可的。 –

+0

我相信@ nick66的評論不再是真的[請參閱反序列化詳細信息](https://github.com/ServiceStack/ServiceStack/wiki/CSV-Format#csv-deserialization-support) – user25064

相關問題