2012-06-20 29 views
8

Tôi đang đùa giỡn với việc tuần tự hóa và deserializing tập tin CSV và tôi tự hỏi nếu có một thư viện hiện có, tương tự như khái niệm XmlSerializer, có thể khai báo các đối tượng và (de) serialize chúng đến/từ một tệp hoặc luồng. Tôi đã nhìn xung quanh một chút nhưng không tìm thấy bất cứ điều gì tập trung vào serialization. Tôi đã có mã khá vững chắc để phân tích cú pháp tài liệu CSV trên RFC 4180, nhưng điều thực sự hữu ích là phần tuần tự hóa. Điều tôi đang xem không phải là đang tìm kiếm chỉ là một trình phân tích cú pháp, hãy sử dụng String.Split(), v.v.Có điều gì giống như Trình nối tiếp CSV không? (tương tự như XmlSerializer)

Có dự án hiện tại không?

Câu hỏi nghi thức về tiền thưởng: nếu tôi kết thúc việc sắp xếp trình tự nối tiếp của riêng mình, liệu có thích hợp để trả lời câu hỏi này bằng liên kết đến dự án codeplex không?

+0

thể trùng lặp của [Thực hành tốt nhất cho serializing đối tượng sang một định dạng chuỗi tùy chỉnh để sử dụng trong một tập tin đầu ra] (http://stackoverflow.com/questions/1179816/best-practices-for-serializing-objects- to-a-custom-string-format-cho-sử dụng-in-an-o) –

+0

Để đặt lại và nhấn mạnh một phần câu hỏi ban đầu của tôi, tôi không quan tâm đến việc duyệt qua danh sách và tham gia chuỗi bằng dấu phẩy. Các câu hỏi giao dịch cụ thể với các đối tượng khai báo xác định (được thực hiện tương tự bằng cách sử dụng XmlElementAttribute) và sau đó thực hiện (de) serialization dựa trên các khai báo đó. –

Trả lời

1

Bạn nên xem xét FileHelpers Library.

Một số mẫu mã từ trang web của họ:

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

Tôi đã sử dụng this project (CsvHelper) trong quá khứ, và nó hoạt động tương tự như xây dựng trong các lớp serializer NET theo nghĩa là bạn sử dụng thuộc tính cho nghề đầu vào/đầu ra.

Có thực sự không cần phải cuộn của riêng bạn, vì có tấn ra khỏi đó. Nếu bạn tự mình làm, hãy đăng nó. Hầu hết người dùng, khi trả lời một câu hỏi với một cái gì đó họ đã viết cho mình (hoặc được liên kết theo một cách nào đó) thường cho một tuyên bố từ chối nói như vậy là một lịch sự.

13

Tôi rất muốn giới thiệu servicestack.text cho mục đích này. Avialable trên NuGet:

Install-package servicestack.text 

Nó suports serialization với nhiều định dạng dữ liệu và không giống như việc xây dựng trong XmlSerializer, bạn không cần phải để trang trí tất cả các tài sản của bạn với các thuộc tính. Dưới đây là một ví dụ để tuần tự hóa thành CSV.

using ServiceStack.Text; 
... 

var csv = CsvSerializer.SerializeToCsv(new[]{ 
    new Dog() { 
    Bark = "Woof!", 
    Male = true, 
    Size = 10 
}}); 
+2

Chỉ cần tiết kiệm thời gian cho bất kỳ ai cần, deserialization CSV chưa được triển khai trong ServiceStack. Điều này không rõ ràng từ tài liệu ban đầu. Nó nằm trong danh sách việc cần làm. – nick66

+1

Lưu ý đây là giấy phép được AGPL cấp phép. –

+0

Tôi tin rằng nhận xét của @ nick66 không còn đúng [xem tại đây để biết thêm chi tiết về deserialization] (https://github.com/ServiceStack/ServiceStack/wiki/CSV-Format#csv-deserialization-support) – user25064

Các vấn đề liên quan