2012-06-20 17 views
8

Estoy jugando con la serialización y deserialización de archivos CSV y me pregunto si hay una biblioteca existente, similar en concepto al XmlSerializer, que puede definir declarativamente objetos y (de) serializarlos a/desde un archivo o secuencia Miré un poco pero no encontré nada enfocado en la serialización. Ya tengo un código bastante sólido para analizar documentos CSV según RFC 4180, pero lo que sería realmente útil es la parte de serialización. Lo que estoy no buscando es sólo un programa de análisis, asesoramiento a utilizar String.split(), etc.¿Existe un serializador CSV? (similar a XmlSerializer)

¿Hay un proyecto existente que hay, o debería construir uno?

Pregunta de etiqueta de bonificación: si termino rodando mi propio serializador, ¿es apropiado responder a esta pregunta con un enlace al proyecto codeplex?

+0

posible duplicado de [Mejores prácticas para la serialización de objetos en un formato de cadena personalizada para su uso en un archivo de salida] (http://stackoverflow.com/questions/1179816/best-practices-for-serializing-objects- to-a-custom-string-format-for-use-in-an-o) –

+0

Para replantear y enfatizar una parte de mi pregunta original, no me interesa simplemente atravesar una lista y unir cadenas con comas. La pregunta se refiere específicamente a la definición declarativa de objetos (realizada de manera similar con XmlElementAttribute) y luego a la (de) serialización basada en esas declaraciones. –

Respuesta

1

Deberías echar un vistazo a FileHelpers Library.

algunos ejemplos de código de su sitio:

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

He usado this project (CsvHelper) en el pasado, y que funciona de forma similar a la acumulación en las clases de .NET serializador en el sentido de que utiliza atributos para elaborar la entrada /salida.

No hay necesidad de hacer las suyas, ya que hay toneladas por ahí. Si terminas enrollando el tuyo, no dudes en publicarlo. La mayoría de los usuarios, cuando responden a una pregunta con algo que han escrito ellos mismos (o están afiliados de alguna manera), generalmente dan un descargo de responsabilidad diciendo que es una cortesía.

13

Recomiendo encarecidamente servicestack.text para este propósito. Avialable en Nuget:

Install-package servicestack.text 

Se suports serialización a muchos formatos de datos y al contrario que el construido en el XmlSerializer, no es necesario para decorar todas sus propiedades con atributos. Aquí hay un ejemplo para serializar a CSV.

using ServiceStack.Text; 
... 

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

Solo para ahorrar tiempo, cualquiera que necesite, la deserialización de CSV aún no se implementa en ServiceStack. Esto no está claro en la documentación inicial. Está en la lista de tareas pendientes. – nick66

+1

Tenga en cuenta que esta es una licencia de AGPL. –

+0

Creo que el comentario de @ nick66 ya no es cierto [ver aquí para detalles de deserialización] (https://github.com/ServiceStack/ServiceStack/wiki/CSV-Format#csv-deserialization-support) – user25064

Cuestiones relacionadas