using System.Collections.Generic;
using System.ComponentModel;
private bool _IsWorking = true;
[ProtoMember(1)] public string Name { get; set; }
[ProtoMember(2)] public int Age { get; set; }
[ProtoMember(3)] [DefaultValue(true)] public bool IsWorking { get {return _IsWorking;} set{ _IsWorking=value; }}
[ProtoMember(4)] [DefaultValue(-1)] public int EmpNo { get {return _empNo;} set{ _empNo=value; }}
public override string ToString()
StringBuilder sb = new StringBuilder();
sb.AppendFormat(" Name: '{0}'", Name);
sb.AppendFormat(", Age: {0}", Age);
sb.AppendFormat(", IsWorking: {0}", IsWorking);
sb.AppendFormat(", EmpNo: {0}", EmpNo);
[ProtoMember(1)] public string Name { get; set; }
[ProtoMember(2)] public int Age { get; set; }
[ProtoMember(3)] public bool IsWorking { get; set; }
[ProtoMember(4)] public int EmpNo { get; set; }
public override string ToString()
StringBuilder sb = new StringBuilder();
sb.AppendFormat(" Name: '{0}'", Name);
sb.AppendFormat(", Age: {0}", Age);
sb.AppendFormat(", IsWorking: {0}", IsWorking);
sb.AppendFormat(", EmpNo: {0}", EmpNo);
public static void Main()
var person = new Person () { Name = "A", Age = 20 };
var data = SerializationHelper.ProtoBufferSerialize<Person> (person);
var personRestored = SerializationHelper.ProtoBufferDeserialize<Person> (data);
var person_GenRestored = SerializationHelper.ProtoBufferDeserialize<Person_Gen> (data);
Console.WriteLine(person.ToString() + " - Original class (C#)");
Console.WriteLine(personRestored.ToString() + " - Deserialized to Original class (C#)");
Console.WriteLine(person_GenRestored.ToString() + " - Deserialized to Generated class (C++ alike)");
var person_Gen = new Person_Gen () { Name = "X", Age = 99 };
data = SerializationHelper.ProtoBufferSerialize<Person_Gen> (person_Gen);
person_GenRestored = SerializationHelper.ProtoBufferDeserialize<Person_Gen> (data);
personRestored = SerializationHelper.ProtoBufferDeserialize<Person> (data);
Console.WriteLine(person_Gen.ToString() + " - Generated class (C++ alike)");
Console.WriteLine(person_GenRestored.ToString() + " - Deserialized to Generated class (C++ alike)");
Console.WriteLine(personRestored.ToString() + " - Deserialized to Original class (C#)");
public class SerializationHelper
public static byte[] ProtoBufferSerialize<T>(T obj)
if (EqualityComparer<T>.Default.Equals(obj, default(T)))
using (var stream = new MemoryStream())
ProtoBuf.Serializer.Serialize(stream, obj);
public static T ProtoBufferDeserialize<T>(byte[] contentBytes)
if (contentBytes == null || contentBytes.Length == 0)
using (var stream = new MemoryStream(contentBytes))
return ProtoBuf.Serializer.Deserialize<T>(stream);