Tengo un único archivo y necesito serializar varios objetos de la misma clase cuando se crea un objeto nuevo. No puedo almacenarlos en matrices ya que necesito serializarlas la instancia que crea un objeto. Por favor, ayúdame.Tengo un archivo único y necesito serializar varios objetos aleatoriamente. ¿Cómo puedo en C#?
Respuesta
Ver la respuesta here.
En resumen, simplemente serialice todo en el mismo flujo de archivos, y luego deserialice. dotNet sabría el tamaño de cada objeto
¿Qué mecanismo de serialización está utilizando? XmlSerializer
podría ser un problema debido al nodo raíz y cosas como las declaraciones del espacio de nombres, que son un poco difíciles de obtener, además, no es genial en deserializaciones parciales. BinaryFormatter
es muy frágil para empezar, no lo recomiendo en la mayoría de los casos.
Una opción podría ser protobuf-net; se trata de un serializador binario (que utiliza el formato de "búferes de protocolo" de Google: eficiente, portátil y tolerante a versiones). Puede serializar varios objetos en una secuencia con Serializer.SerializeWithLengthPrefix
. Para deserializar los mismos artículos, Serializer.DeserializeItems
devuelve IEnumerable<T>
de los artículos deserializados, o puede hacer que TryDeserializeWithLengthPrefix
sea público (actualmente es privado, pero la fuente está disponible).
Simplemente escriba cada objeto en un archivo después de haberlo creado, trabajo hecho.
Si quiere un ejemplo, por favor diga que aunque la unidad prueba here, dé una visión general.
Sería básicamente ser algo así como (no probado):
using(Stream s = File.Create(path))
{
Serializer.SerializeWithLengthPrefix(s, command1, PrefixStyle.Base128, 0);
... your code etc
Serializer.SerializeWithLengthPrefix(s, commandN, PrefixStyle.Base128, 0);
}
...
using(Stream s = File.OpenRead(path)) {
foreach(Command command in
Serializer.DeserializeItems<Command>(s, PrefixStyle.Base128, 0))
{
... do something with command
}
}
Sé que llego tarde a la fiesta, pero ¿te importaría explicar * 'BinaryFormatter es muy frágil para empezar, no lo recomiendo en la mayoría de los casos. * * ¿Por qué es frágil? ¿Por qué no lo recomiendas? Ha pasado un tiempo desde esta respuesta. ¿Quizás puedas recomendar otra forma de serializar múltiples objetos en un solo archivo/múltiples archivos? –
@mehow sure: BinaryFormatter es muy intolerante a la versión/refactor: es muy fácil hacer que no pueda deserializar los archivos existentes al cambiar ... bueno, francamente. También depende del marco y de la plataforma, restringiendo las opciones. También es innecesariamente hinchado e ineficiente, y tiene una serie de "errores". En cuanto a su otra pregunta: soy parcial, pero diría que protobuf-net aborda todos estos. Eso fue, después de todo, el objetivo del diseño :) protobuf-net está perfectamente satisfecho con múltiples objetos en una secuencia, siempre que se utilicen los métodos * WithLengthPrefix. –
Gracias, lo aprecio –
Por cada objeto que llega, que lo convertirá en una cadena Base64Encoded y almacenarlo como una línea en un archivo de texto. Entonces, en este archivo, cada fila tendrá un objeto serializado por línea. Mientras leemos leeremos el archivo una línea a la vez y deserializaremos esta cadena codificada en Base64 en nuestro Objeto. Fácil ... así que vamos a probar el código.
http://www.codeproject.com/KB/cs/serializedeserialize.aspx?display=Print
- 1. Android: Cómo escribir varios selectores en un único archivo xml
- 2. NSSet cómo extraer objetos aleatoriamente?
- 3. ¿Cómo serializar y deserializar objetos Javascript?
- 4. R: serializar objetos al archivo de texto y viceversa
- 5. Lectura de un único archivo de varios subprocesos en python
- 6. C++ Serializar un archivo std :: a un archivo
- 7. escribiendo muchos objetos Java en un único archivo
- 8. Objetos serializar utilizando xmlSerializer.Serialize y objetos IEnumerable
- 9. ¿Cómo serializar en un archivo existente?
- 10. Serializar una matriz en C#
- 11. ¿Cómo puedo "modificar" varios archivos en un solo archivo base?
- 12. ¿Cómo puedo usar un dll C# (managed) que no tengo?
- 13. Combinar archivos C++ en un único archivo de origen
- 14. php cómo serializar una matriz de objetos?
- 15. Cómo serializar datos en C
- 16. ¿Puedo serializar un objeto tipo C#?
- 17. ¿Cómo puedo serializar un cierre en Perl?
- 18. Agrupación de varios eventos en un único archivo ics (secuencia de icalendar)
- 19. Cómo serializar objetos creados por las fábricas
- 20. cómo bloquear varios objetos?
- 21. ¿Cómo puedo distribuir mi aplicación Perl como un único archivo?
- 22. Estrategia para la serialización de objetos en varios idiomas (java y C#)
- 23. ¿Cómo puedo definir varios objetos asociados usando Factory Girl?
- 24. Varios contadores en un único bucle for: Python
- 25. Cómo pago y envío un único archivo en GIT
- 26. ¿Cómo serializar un paquete?
- 27. Certificado de SSL único en varios servidores
- 28. cómo descargar un solo archivo con varios subprocesos en C#
- 29. SharpZipLib: La compresión de un único archivo en un único archivo comprimido
- 30. Devolviendo varios objetos con un resultado JSON
¿Qué quieres decir con randomly? –
Creo que debes aclarar tu inglés. –
¿Está guardando los objetos en ese "único archivo" y recuperándolos de él? Cuando dice que desea "serializar" los objetos tan pronto como se crean, ¿quiere decir que quiere guardarlos en ese único archivo? – DOK