Buone notizie; quello che hai descritto (avendo le classi C# esistenti) è il caso d'uso previsto di protobuf-net. Tutte le cose .proto ("protogen", il componente aggiuntivo VS, ecc.) Sono state tutte aggiunte come ripensamenti . Il nucleo di protobuf-net non li conosce o si preoccupa di loro.
buffer di protocollo definisce un DSL (.proto, come si menziona) condiviso tra le implementazioni ed è (talvolta) utilizzato per la generazione del codice. Quando scrissi per la prima volta protobuf-net, l'aspetto della generazione del codice non era la mia più grande preoccupazione - semplicemente che gli sviluppatori .NET sono generalmente colpevoli (me stesso incluso) di "implementazione prima" piuttosto che "contratto prima".
Di conseguenza, protobuf-net non necessita di file .proto per funzionare; una classe attribuita è sufficiente per serializzare/deserializzare in modo univoco. Basta usare Serializer.Serialize
, .Merge
e .Deserialize
(ecc.).
Detto questo; si fa includono alcune molto sotto-sviluppato e sperimentale supporto per questo:
string proto = Serializer.GetProto<YourType>();
Questo è ben lungi dall'essere completo, ma può funzionare per i tipi semplici. Se hai casi specifici in cui non riesce, fammelo sapere (aggiungi un commento o registra un problema). Però; la maggior parte delle volte, le persone interessate a .proto scriverebbero la .proto prima e lavoreranno da lì.
Esempi di tipi di lavoro decorati sono visualizzati su project home page; dipende esclusivamente da te se usi gli attributi WCF, gli attributi xml o gli attributi protobuf-net (sebbene questi ultimi forniscano un maggiore controllo su alcuni specifici punti di serializzazione, come l'ereditarietà e i layout numerici).
fonte
2009-08-26 13:50:22
Grande, questo si adatterebbe quindi alle mie esigenze. Tuttavia, un'altra cosa, Protobuf-Net implementa l'intera specifica di Protobuf? –
Abbastanza; le specifiche del formato del filo non sono vaste, a dire il vero. Stai cercando di utilizzare una implementazione separata di .proto? Dovrebbe funzionare bene, ma se hai * un * .proto (per l'altra estremità), ti consiglio di generare un DTO (da .proto) e uno shim a quello dei tuoi tipi. Diventa anche creativo, permettendo a protobuf-net di supportare l'ereditarietà (che è ** non ** parte della specifica core .proto), ma fatta in un modo che consente comunque un'interopedine completa con altri client. –
Non sto cercando di interoperare con un'altra implementazione. Userò protobuf-net come un meccanismo efficiente per serializzare/deserializzare un'intera gerarchia di oggetti tra due applicazioni. –