2010-01-04 4 views
15

Sto lavorando a un progetto in cui ho bisogno di serializzare alcuni dati in un'app java 6 e di deserializzare un'app C# 2.0. C'è una strategia o qualcosa di già esistente che posso vedere che mi permetterebbe di fare questo con queste due lingue? Suppongo che entrambi supportino la serializzazione XML, ma ho davvero bisogno che sia serializzato in formato binario.Strategia per la serializzazione di oggetti cross-language (java e C#)

risposta

17

I buffer di protocollo sarebbero una buona opzione qui. Sul lato C#, consiglierei Jon Skeet dotnet-protobufs per questo caso d'uso, poiché ha la stessa API su entrambi i lati (la sua versione C# è una porta della versione di Google Java, parte della distribuzione principale). Se si desidera che C# sia più "tipico .NET", è possibile che sia protobuf-net.

(il filo formato è ovviamente identica tra versioni; API possono variare)

Piccolo, veloce, efficiente, portable.

Per informazioni, I sa che protobuf-net ha supporto .NET 2.0; Onestamente non ho provato questo sulla versione di Jon, ma I mi aspetto - non c'è molto di cui hai bisogno 3.0/3.5 per in protobuf.

+1

Sì, ho scelto .NET 2.0, oltre a Silverlight 2+ e Compact Framework 2+ (IIRC - la versione CF potrebbe essere la 3.5). –

0

Non credo che la serializzazione binaria funzionerà come C# e Java non hanno idea dei rispettivi tipi nativi.

+4

"serializzazione binaria" non è necessariamente la stessa cosa di "tipo/metadati serializzazione". Molti formati binari non dipendono dai tipi utilizzati in nessuna implementazione. –

9

Protocol Buffers (Google Site)

Java Tutorial

Jon Skeet's C# Port

Marc Gravell's C# Port

Upsides: veloce e si può bug abbastanza alcune persone che sono coinvolte con questa cosa su SO .. ;-)

Lasciami sfruttare il pro di Marc ct site: Performance is quite acceptable ..

+0

Sì, come Marc e io mai si presentano qui. E 'un colpo di fortuna che ci è capitato di avere entrambi guardato a questa domanda. –

+0

Contento di poterti convocare allora. Piuttosto una visione rara in effetti .. –

6

La serializzazione binaria predefinita di ogni lingua non è compatibile, quindi non sarà possibile utilizzarla.

Ci sono molte tecnologie cross-language serializzazione che supportano Java, C# e altri linguaggi:

di questi non, JSON è binario ma molto efficiente per un linguaggio basato su stringhe. I buffer di risparmio e di protocollo sono binari e hanno una rappresentazione molto compatta.

3

Google Protocol Buffers è qualcosa che è possibile esaminare. Dovrai controllare nello stato di usabilità dell'implementazione C#, ma in tutti gli altri aspetti, penso che soddisfi le tue esigenze.

4

Si potrebbe provare dell'Assia:

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

E 'binario, e supporta Java, C++, e molte altre lingue. Non l'ho mai usato da solo, ma l'ho trovato, ho pensato che fosse interessante e l'ho aggiunto ai segnalibri ...

0

Qui farò eco la maggior parte delle altre risposte per quanto riguarda i buffer del protocollo di Google. Ma alla fine ho utilizzato un programma chiamato protostuff all'estremità Java anziché l'implementazione Java di Google e ho anche aggiunto il nome della classe (più esterna) come prefisso ai dati dei buffer del protocollo per rendere i dati auto-descrittivi per la deserializzazione. Dettagli: https://stackoverflow.com/a/17923846/253938

Problemi correlati