Serializacion datatable

Iniciado por diego_lp, 26 Febrero 2010, 19:18 PM

0 Miembros y 1 Visitante están viendo este tema.

diego_lp

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.
Los programadores hicimos un pacto con Dios, él no hace sistemas y nosotros no hacemos milagros!

elmaro

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

[D4N93R]

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!

diego_lp

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.
Los programadores hicimos un pacto con Dios, él no hace sistemas y nosotros no hacemos milagros!

raul338

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

[D4N93R]

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!