2010-01-04 17 views
15

Estoy trabajando en un proyecto en el que necesitaré serializar algunos datos en una aplicación java 6 y deserializar una aplicación C# 2.0. ¿Hay alguna estrategia o algo que ya exista y que pueda ver que me permita hacer esto con estos dos idiomas? Supongo que ambos admiten la serialización de XML, pero realmente necesito que sea binaria serializada.Estrategia para la serialización de objetos en varios idiomas (java y C#)

Respuesta

17

Los búfers de protocolo serían una buena opción aquí. En el lado C#, recomendaría el dotnet-protobufs de Jon Skeet para este caso de uso, ya que tiene la misma API en ambos lados (su versión C# es un puerto de la versión Google Java, parte de la distribución principal). Si desea que el C# sea más "típico .NET", entonces protobuf-net puede ayudar.

(el formato de alambre es, obviamente, idénticos entre las versiones, el API puede variar)

pequeño, rápido, eficiente, portable.

Para información, I saber que protobuf-net tiene .NET 2.0 de soporte; Honestamente, no he probado esto en la versión de Jon, pero espero que - no hay mucho que necesites 3.0/3.5 para en protobuf.

+1

Sí, tengo como objetivo .NET 2.0, así como Silverlight 2+ y Compact Framework 2+ (IIRC - la versión CF puede ser 3.5). –

0

No creo que la serialización binaria funcione como C# y Java no tenga idea de los demás tipos nativos.

+4

"serialización binaria" no es necesariamente lo mismo que "serialización/tipo de metadatos". Muchos formatos binarios no dependen de los tipos utilizados en cualquier implementación. –

6

La serialización binaria predeterminada de cada idioma no es compatible, por lo que no podrá usarla.

Hay muchas tecnologías entre lenguajes de serialización que soportan Java, C# y otros lenguajes:

De ellos no, JSON es binaria pero muy eficiente para un lenguaje basado en cadenas. Los búferes Thrift y Protocol son binarios y tienen una representación muy compacta.

3

Protocol Buffers de Google es algo que se puede considerar. Deberá verificar el estado de usabilidad de la implementación de C#, pero en todos los demás aspectos, creo que satisface sus necesidades.

4

Usted podría tratar de Hesse:

http://hessian.caucho.com/index.xtp

Es binario, y es compatible con Java, C++, y varios otros idiomas. Nunca lo he usado, pero lo encontré, pensé que era interesante, y lo marqué como favorito ...

0

Voy a hacerme eco de la mayoría de las otras respuestas aquí en lo que respecta a los buffers de protocolo de Google. Pero terminé usando un programa llamado protostuff en el extremo de Java en lugar de la propia implementación de Java de Google, y también agregué el nombre de la clase (más externa) como un prefijo a los datos de los buffers de protocolo para hacer que los datos se autodescriban para la deserialización. Detalles aquí: https://stackoverflow.com/a/17923846/253938

Cuestiones relacionadas