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.
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
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!
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.
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
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!