En nuestra aplicación Cliente/Servidor, hemos estado utilizando BinaryFormatter para el proceso de serialización. Por razones de rendimiento, estamos intentando migrar a protobuf-net (http://code.google.com/p/protobuf-net/).¿Cómo comparar dos gráficos de objetos .NET para las diferencias?
Nuestro software transmite gráficos enormes con ciclos entre Cliente y Servidor.
Ahora estoy buscando una forma de asegurarme de que los datos que se serializaron y deserializaron usando protobuf son exactamente los mismos que usó BinaryFormatter.
Una comparación poco a poco es simple: serializo usando BinaryFormatter a un archivo. Deserializar este archivo nuevamente utilizando BinaryFormatter. Luego serializo usando ProtoBuf en un archivo. Deserializar utilizando ProtoBuf desde ese archivo. Serializar de nuevo usando BinaryFormatter en un archivo.
Entonces simplemente puedo comparar ese archivo con el archivo original.
Sin embargo, esos dos archivos no son 100% iguales. Entonces ahora necesito encontrar una manera de rastrear las diferencias.
¿Existe alguna herramienta que visualice datos serializados por BinaryFormatter? ¿O conoces algún otro ayudante que haga una comparación profunda y me diga dónde están las diferencias?
El uso de XMLSerializer y la comparación de dos archivos XML no es posible ya que BinaryFormatter es capaz de serializar mucho más datos que XMLSerializer, incluso sin marcar campos explícitamente.
Gracias, TH
Tengo un montón de código aquí en SO para comparar objetos individuales, pero comparar un gráfico completo es ... complicado. Si tuviera que * adivinar *, me preguntaría si hay pequeñas diferencias de precisión con fecha y hora. –
Hola Marc. Si los archivos fueran casi idénticos, diría lo mismo. Sin embargo, me falta aproximadamente el 25% de los datos. Ahora me pregunto si, por ejemplo, las referencias a las instancias se compartieron aunque no deberían (porque las referencias originales no apuntaban al mismo objeto) o si simplemente olvidé agregar ciertos campos a TypeModel. Alguna herramienta sería genial, simplemente traza todo el gráfico del objeto a un gráfico legible por humanos (similar a lo que hace http://ignatu.co.uk/ViewStateDecoder.aspx (sin embargo, ese algoritmo no funciona con nuestros enormes gráficos)) – TwinHabit