Test Foro de elhacker.net SMF 2.1

Programación => Programación General => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: diego_lp en 26 Febrero 2010, 19:18 PM

Título: Serializacion datatable
Publicado por: diego_lp en 26 Febrero 2010, 19:18 PM
Hola a todos, estoy en un proyecto de cliente-servidor los cuales se conectan a travez de un socket.
Alguien me podria ayudar a contruir una funcion para serializar un datatable y otra para deserializarlo para poder mandarlo a travez del socket?
Muchas gracias.
Título: Re: Serializacion datatable
Publicado por: elmaro en 26 Febrero 2010, 20:09 PM
Código (vbnet) [Seleccionar]
Public Shared Function Serialize(ByVal Obj As Object, ByVal AsByte As Boolean) As Byte()
       Dim bf As New Runtime.Serialization.Formatters.Binary.BinaryFormatter
       Dim ms As New IO.MemoryStream
       bf.Serialize(ms, Obj)
       Return ms.ToArray
End Function

Public Shared Function Deserialize(ByVal Obj As Byte()) As Object
       Dim bf As New Runtime.Serialization.Formatters.Binary.BinaryFormatter
       Dim ms As New IO.MemoryStream(Obj)
       Return bf.Deserialize(ms)
End Function
Título: Re: Serializacion datatable
Publicado por: [D4N93R] en 26 Febrero 2010, 20:12 PM
Hola,

para Serializar usa la clase XmlSerializer, y para Deserializar usa XmlDesserializer. Estoy super corto de tiempo pero va algo asi:



MyClass classinstance= new MyClass();
XmlSerializer s = new XmlSerializer(typeof(MyClass));

MemoryStream writer = new MemoryStream();
ser.Serialize(writer, classinstance);

//Ahora todo esta en el stream.




Saludos!
Título: Re: Serializacion datatable
Publicado por: diego_lp en 9 Marzo 2010, 17:32 PM
Gracias a ámbos por contestar, pude solucionarlo con las funciones para serializar y deserializar de elmaro, de todos modos gracias a los dos por tomarse la molestia de contestar.
Tengo una duda mas, el datable que envío por un socket al momento de serializarlo pasa a ocupar al rededor de 400 bytes por registro (es decir, si tiene 100 registros ocupa aproximadamente 40000 bytes.
Mi pregunta es la siguiente: ¿hay alguna manera de comprimir ese array de bytes para que ocupe menos al momento de enviarlo por el socket?
Muchas gracias a todos.
Saludos.
Título: Re: Serializacion datatable
Publicado por: raul338 en 9 Marzo 2010, 17:39 PM
Si usas variables booleanas, puedes convertirlos a flags en un solobyte (7 campos booleanos = 1 Byte!)
Si podes usa ASCII (unicode tiene mas caracteres, pero ocupa 2 bytes por caracter; ASCII ocupa un byte por caracter)
Si usas numeros, trata de convertirlos a un byte o 2 (los integer ocupan 4 bytes, si vas a guardar la edad guardala en un solo byte, no creo que alguien tenga mas de 255 años :xD)

Y para texto, busca algun algoritmo de compresion
Título: Re: Serializacion datatable
Publicado por: [D4N93R] en 10 Marzo 2010, 22:37 PM
Si se puede, porque el Stream a donde serializas puede ser un memoryStream, ese lo comprimes, y luego lo mandas por el socket.. si no puedes hacerlo me dices y te escribo el codigo.. Que ahora ando un poco corto de tiempo! :D

Saludos!