Ich musste kürzlich nach einer C # -Portierung der Protokollpuffer-Bibliothek suchen, die ursprünglich von Google entwickelt wurde. Und raten Sie mal, ich habe hier zwei Projekte gefunden, die beiden sehr bekannten Personen gehören: protobuf-csharp-port , geschrieben von Jon Skeet und protobuf-net , geschrieben von Marc Gravell . Meine Frage ist einfach: Welches muss ich wählen?
Marcs Lösung gefällt mir sehr gut, da sie mir näher an der C # -Philosophie liegt (Sie können beispielsweise nur Eigenschaften zu den Eigenschaften der vorhandenen Klasse hinzufügen) und anscheinend integrierte .NET-Typen wie System.Guid unterstützt.
Ich bin mir sicher, dass beide wirklich großartige Projekte sind, aber was ist Ihre Meinung?
c#
protobuf-net
PierrOz
quelle
quelle
Antworten:
Ich stimme Jons Punkten zu; Wenn Sie über mehrere Umgebungen codieren, bietet Ihnen seine Version eine ähnliche API wie die anderen "Kern" -Implementierungen. protobuf-net ähnelt viel mehr der Implementierung der meisten .NET-Serialisierer und ist daher für .NET-Entwickler vertrauter (IMO). Und wie Jon Noten - der rohe Binärausgang sollte identisch sein , so dass Sie mit einer anderen API neu implementieren können , wenn Sie später benötigen.
Einige Punkte bezüglich Protobuf-Net, die für diese Implementierung spezifisch sind :
ISerializable
für vorhandene Typen zu implementierenShouldSerialize[name]
XmlType
/XmlElement
oderDataContract
/DataMember
) - was (zum Beispiel) bedeutet, dass LINQ-zu-SQL-Modelle sofort serialisiert werden (solange die Serialisierung in der DBML aktiviert ist)(* = Diese Funktionen verwenden 100% gültige Protobuf-Binärdateien, die jedoch möglicherweise nur schwer in anderen Sprachen verwendet werden können.)
quelle
Verwenden Sie in Ihrem Projekt auch andere Sprachen? In diesem Fall können Sie über meinen C # -Port auf allen Plattformen ähnlichen Code schreiben. Wenn nicht, ist Marc's Port wahrscheinlich zunächst idiomatischer C #. (Ich habe versucht, meinen Code wie normales C # "fühlen" zu lassen, aber das Design basiert eindeutig auf dem Java-Code, damit er auch denjenigen vertraut ist, die Java verwenden.)
Eine der Schönheiten dabei ist natürlich, dass Sie Ihre Meinung später ändern können und sicher sein können, dass alle Ihre Daten über das andere Projekt weiterhin gültig sind - sie sollten für mich absolut binär kompatibel sein (in Bezug auf serialisierte Daten) bin mir bewusst.
quelle
Laut der GitHub-Projektseite wurde protobuf-csharp-port jetzt in das Hauptprojekt von Google Protocol Buffers integriert. Es handelt sich also um die offizielle .NET-Implementierung von protobuf 3. protobuf-net wurde jedoch zuletzt 2013 aktualisiert , obwohl dies bereits geschehen ist Einige Commits wurden kürzlich in GitHub ausgeführt .
quelle
Ich habe gerade von protobuf-csharp-port zu protobuf-net gewechselt, weil:
quelle
In meinem Fall möchte ich Protokollpuffer verwenden, um ein XML-basiertes Kommunikationsmodell zwischen einem .net-Client und einem j2ee-Backend zu ersetzen. Da ich bereits die Codegenerierung verwende, werde ich mich für Jons Implementierung entscheiden.
Für Projekte, die kein Java Interop erfordern, würde ich die Implementierung von Marc wählen, zumal v2 das Arbeiten ohne Anmerkungen ermöglicht.
quelle