Download presentation
1
Portable binary serialization, the Google way
Protocol Buffers Portable binary serialization, the Google way
2
What problem? For high volume work, no ideal serializer:
Xml/data-contracts: (relatively) expensive to process; large due to repeated tags Soap: as xml, but more BinaryFormatter (/NDCS): proprietary closed [non-]standard Bespoke: lots of work; lots of potential for error
3
What is protobuf? Protocol Buffers defines two things:
A compact binary serialization format (pb) A text-based descriptor language (.proto) Implementation specific: Runtime serialization library / code .proto parser / code generator protobuf-net is one of 3 in-progress efforts for .NET
4
What is a .proto? Yet another descriptor language... message Test1 {
required int32 a = 1; } message Test3 { optional Test1 c = 3; service SearchService { rpc Search (SearchRequest) returns (SearchResponse);
5
So why bother? Compact: Portable: Fast:
no string field names (contrast: XmlSerializer; DataContractSerializer) uses variable-length encoding where sensible minimal framing overhead Portable: cross-platform (contrast: BinaryFormatter) extensible (roundtrip-safe) (protobuf-net works with .NET 2.0; .NET 3.0; CF 2.0; CF 3.0; Silverlight 2.0; Mono) Fast: efficient to parse Optimised for common scenarios, but doesn’t support every complex worst-case scenario.
6
Look familiar? Closely related to data/service-contracts
[DataContract] public class Test1 { [DataMember(Name="a", Order=1, IsRequired=true)] public int A {get;set;} } public class Test3 [DataMember(Name="c", Order=3, IsRequired=false)] public Test1 C {get;set;} [ServiceContract] public interface ISearchService [OperationContract] SearchResponse Search(SearchRequest request);
7
Demo
8
Where can we use it? Communications Persistance Remoting WCF
Sockets / http (proto-rpc?) Persistance File system Database BLOB SQL/CLR?
9
Existing data? Works with common frameworks:
WCF LINQ-based data-contracts XmlType / XmlElement Can be used to replace, or in parallel with, standard serializers: ISerializable IXmlSerializable Custom attributes for full control Can also be specified at the class (rather than member) for use with partial classes
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.