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ライブラリを確認する必要があります。

彼らのサイトからのいくつかのサンプルコード:

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 に答える