2010-05-23 9 views
14

Ho letto di protobuf-net ed è incredibile!Esistono tutorial per Protobuf-net?

Esistono esercitazioni che è possibile utilizzare? (Più specificamente per Dictionary<TKey,TValue> e contratti per generici)

Ci sono dei suggerimenti ad esso associati?

Posso semplicemente collegarlo alla mia base di codice corrente o ci sono dei cambiamenti che devo fare?

+0

Puoi dire qualcosa in più su ciò che sta facendo attualmente il codice base? – Carlos

risposta

14

Dictionary<TKey,TValue> dovrebbe in gran parte funzionare (almeno in "v1"; non l'ho ancora scritto per "v2").

Ammetto pienamente che la documentazione è ... sparsa. Le cose che balzano alla mente:

  • Getting Started (e ci sono un paio di altre pagine del wiki)
  • ci sono un serie delle cose nel trunk; il progetto "Esempi" raddoppia come le unità di test, in modo da può aiutare
  • my blog

Ho un sacco accadendo in questo momento (ho appena cambiato lavoro, ecc), ma le mie priorità sono :

  • ottenere una stabile "v2" beta rilasciato, almeno la caratteristica principale impostata
  • migliorare la documentazione

Il tempo è il mio più grande nemico. Ma se hai uno scenario specifico, sentiti libero di darmi un ping e cercherò di risponderti il ​​prima possibile.

"Posso semplicemente collegarlo"; che dipende dal tuo codice ;-p

Ha bisogno di del tipo per determinare un numero univoco per ciascun membro che desideri serializzare.Il modo più semplice per farlo è tramite gli attributi; supporta qualsiasi [XmlElement(Order=n)], [DataMember(Order=n)] o [ProtoMember(n)]. Se hai già almeno uno di questi (LINQ-to-SQL include [DataMember], ad esempio), allora potrebbe semplicemente funzionare.

sono opzioni per inferire automaticamente i numeri, ma che è fragile e sconsigliato. Usalo solo se tu conosci non hai mai bisogno di aggiungere altri membri (li ordina in ordine alfabetico, quindi aggiungere un nuovo AardvarkCount interromperà tutto).

In "v2" (non rilasciato, ma funziona), ora è possibile gestire i metadati indipendentemente dai tipi, ad esempio è possibile utilizzare protobuf-net con POCO, tipi non attribuiti. Puoi anche bypassare i costruttori etc (stile WCF). Molto più flessibile, se lo vuoi. Anche l'approccio degli attributi è supportato, ovviamente.

+0

Ehi, grazie Marc. Quindi, usare il dizionario funziona in v1 e v1 è pronto per la produzione? Non ho alcun vincolo per usare l'ultima versione o altro. L'unica cosa è, funziona in .net 4.0? E quanto è sicuro il thread? – akshaykarthik

+0

@AKRamkumar "v1" è in effetti la versione disponibile per il download come dll precompilata. Dovrebbe essere completamente thread-safe, e dovrebbe funzionare bene in .NET 4.0. Il rilascio "v2" ha molti vantaggi, ma non è essenziale per commutare - sono pienamente filo-compatibile. –

+0

Quindi l'uso del dizionario funzionerebbe nella v2? Farebbe con qualsiasi tipo per TKey o TValue lavoro o dovrei essere limitato a tipi specifici. (Scusate se io suono noobish, io non sono che un buon programmatore) – akshaykarthik

2

Stranamente, ho appena risposto a un'altra domanda con un collegamento a protobuf-net.

L'ho trovato relativamente semplice da fare e Marc è molto reattivo via email. (Hehe, scusa se invito qualcuno a inviarti spam con domande!)

Per documentazione, ho detto che era un po 'scarso. Ma ecco cosa stavo usando per:

Avevo un sistema di messaggistica basato su XML che era un po 'troppo prolisso. Quindi volevo sostituire i messaggi con qualcosa che codificasse le stesse informazioni, ma molto più compatto. Protobuf-net si è rivelato perfetto per questo, e non ho sostituito il mio modulo basato su xmlserialzer con uno proto-based.

Era piuttosto semplice. Ho passato il mio progetto, sostituendo [XmlInclude] e attributi simili con [ProtoInclude], e ovviamente ho sostituito il serializzatore xml con il serializzatore proto. Uno o due problemi riguardanti i tipi che potevano essere serializzati sono stati risolti con l'aiuto di Marc, e non molto il refactoring del codice.