Foro de elhacker.net

Programación => .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
  1. Public Shared Function Serialize(ByVal Obj As Object, ByVal AsByte As Boolean) As Byte()
  2.        Dim bf As New Runtime.Serialization.Formatters.Binary.BinaryFormatter
  3.        Dim ms As New IO.MemoryStream
  4.        bf.Serialize(ms, Obj)
  5.        Return ms.ToArray
  6. End Function
  7.  
  8. Public Shared Function Deserialize(ByVal Obj As Byte()) As Object
  9.        Dim bf As New Runtime.Serialization.Formatters.Binary.BinaryFormatter
  10.        Dim ms As New IO.MemoryStream(Obj)
  11.        Return bf.Deserialize(ms)
  12. End Function
  13.  


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:

Código:

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!