protobuf-net - protocol buffers library for idiomatic .net

Post on 20-Jan-2017

116 Views

Category:

Technology

3 Downloads

Preview:

Click to see full reader

TRANSCRIPT

PROTOBUF-NETLarry Nung

AGENDAIntroductionGetting startedDecorate class

ProtoContractDataContractRuntimeTypeModel

Serialize /DeSerialize DataSerialize /DeSerialize streamSerialize /DeSerialize textSerialize /DeSerialize file

Generate proto fileReferenceQ & A

2

INTRODUCTION3

INTRODUCTION Protocol Buffers library for idiomatic .NET Contract based serializer for .NET code

4

GETTING STARTED5

GETTING STARTED

Reference library

Decorate class

Serialize /DeSerialize

Data

6

REFERENCE LIBRARY

7

REFERENCE LIBRARY

8

DECORATE CLASS[ProtoContract] class Person { [ProtoMember(1)] public int Id {get;set;} [ProtoMember(2)] public string Name {get;set:} [ProtoMember(3)] public Address Address {get;set;} } [ProtoContract] class Address { [ProtoMember(1)] public string Line1 {get;set;} [ProtoMember(2)] public string Line2 {get;set;} }

9

SERIALIZE DATAvar person = new Person { Id = 12345, Name = "Fred", Address = new Address { Line1 = "Flat 1", Line2 = "The Meadows" } }; using (var file = File.Create("person.bin")) { Serializer.Serialize(file, person); }

10

DESERIALIZE DATAPerson newPerson; using (var file = File.OpenRead("person.bin"))

{ newPerson =

Serializer.Deserialize<Person>(file); }

11

DECORATE CLASS12

PROTOCONTRACT[ProtoContract] class Person { [ProtoMember(1)] public int Id {get;set;} [ProtoMember(2)] public string Name {get;set:} [ProtoMember(3)] public Address Address {get;set;} } [ProtoContract] class Address { [ProtoMember(1)] public string Line1 {get;set;} [ProtoMember(2)] public string Line2 {get;set;} }

13

PROTOCONTRACT[ProtoContract] [ProtoInclude(10, typeof(Male))] [ProtoInclude(11, typeof(Female))] class Person { [ProtoMember(1)] public string Name { get; set; }} [ProtoContract] class Male : Person { } [ProtoContract] class Female : Person { } 14

PROTOCONTRACT[ProtoContract(SkipConstructor = true, ImplicitFields =

ImplicitFields.AllFields)] class Person { public string Name { get; set; } public Person(string name) { Name = name; } [ProtoAfterDeserialization] void Validate() { if (string.IsNullOrEmpty(Name)) throw new Exception("Empty name"); } }

15

DATACONTRACT[DataContract] class Person { [DataMember(Order = 1)] public string Name { get; set; } }

16

RUNTIMETYPEMODELclass Person { public string Name { get; set; } } …RuntimeTypeModel.Default .Add(typeof(Person), false); .Add(1, "Name");

17

SERIALIZE /DESERIALIZE DATA18

SERIALIZE /DESERIALIZE STREAMprivate static void SerializeToStream<T>(T

obj, Stream stream) { Serializer.Serialize(stream, obj); }

private static T DeSerializeFromStream<T>(Stream stream) {

return Serializer.Deserialize<T>(stream); }

19

SERIALIZE /DESERIALIZE TEXTprivate static string SerializeToText<T>(T obj) { using (var ms = new MemoryStream(1024)) { SerializeToStream(obj, ms); return Convert.ToBase64String(ms.ToArray()); } }

private static T DeSerializeFromText<T>(string text) { var buffer = Convert.FromBase64String(text); using (var ms = new MemoryStream(buffer)) { return DeSerializeFromStream<T>(ms); } }

20

SERIALIZE /DESERIALIZE FILEpublic virtual void SerializeToFile<T>(T obj, String file, Int32 bufferSize

= 1024) { using (var fs = File.Open(file, FileMode.Create, FileAccess.Write)) { using (var bs = new BufferedStream(fs, bufferSize)) { SerializeToStream(obj, bs); bs.Flush(); } } } public virtual T DeSerializeFromFile<T>(String file, Int32 bufferSize) { using (var fs = File.Open(file, FileMode.Open, FileAccess.Read,

FileShare.ReadWrite)) { using (var bs = new BufferedStream(fs, bufferSize)) { return DeSerializeFromStream<T>(bs); } } }

21

GENERATE PROTO FILE22

GENERATE PROTO FILEprivate static void

GenerateProtoFile<T>(string file) {

File.WriteAllText(file,Serializer.GetProto<T>());

}

23

REFERENCE24

REFERENCE NuGet Gallery | protobuf-net 2.1.0

https://www.nuget.org/packages/protobuf-net/

25

Q&A26

QUESTION & ANSWER

27

top related