c# - serialized - Binario(De) Serialización de una secuencia de objetos a 1 archivo
serialize object c# (2)
Un archivo es una serialización, así que creo que enviar tu transmisión directamente a un archivo haría lo que parezcas querer. Una explicación más específica de su situación ayudaría, para proporcionar una respuesta más útil. (Me gustaría poder ingresar esto como un ''comentario'', pero de alguna manera el botón de comentario no está disponible para mí.)
Me enfrento con el siguiente problema. Necesito (de) serializar (binario) una secuencia de objetos en un único archivo en el disco. La parte de serialización no es un problema, solo abra una secuencia en modo de adición y use el método Serialize BinaryFormatter de .Net y listo. El problema con este enfoque es que no puedo simplemente dar este flujo a la función de deserialización de BinaryFormatter, lo que contiene no es una sola instancia del objeto que he serializado.
¿Existe una solución común a este problema? Todos los objetos serializados en una secuencia dada son del mismo tipo, por lo que al menos no necesitamos averiguar qué se debe deserializar, eso es un hecho, pero no parece sugerir una salida a esto.
Aclaración basada en respuestas : se espera que la cantidad de objetos enviados sea grande y, por lo tanto, no es posible mantenerlos todos en una colección contenedora (ya que descargarlos a disco requeriría cargarlos todos en la memoria -> agregar los nuevos -> al ras al disco).
- Normalmente, cuando serializas un solo objeto obtienes un archivo que contiene:
[Objeto]
- Lo que estoy creando es un archivo que contiene:
[Objeto] [Objeto] [Objeto] [Objeto] ... [Objeto]
Y necesito deserializar las instancias individuales de Object.
¡Gracias por adelantado!
Respuesta: Dado que la respuesta se alude en este hilo (con suficiente claridad), pero nunca se menciona explícitamente, pensé que lo expresaré aquí:
while (fileStream.Position < fileStream.Length)
messages.Add((Message)formatter.Deserialize(fileStream));
BinaryFormatter deserializará un objeto a la vez como desee :) Es posible que desee almacenar en caché la propiedad fileStream.Length, ya que la longitud parece volver a calcularse cada vez que llama a la propiedad, ralentizando las cosas. No tengo idea de por qué eso no funcionó la primera vez que lo intenté antes de publicar esta pregunta, pero ahora funciona sin problemas.
Intenta poner tus objetos en una colección serializable (creo que List es serializable), luego (de) serializar ese objeto
EDITAR en respuesta a la aclaración: me acabo de dar cuenta de que esta pregunta tiene la misma respuesta que esta pregunta . En lugar de intentar y reinventar una respuesta, simplemente echaría un vistazo a la respuesta de Mark Gravell, o a esta