using System.Runtime.Serialization.Formatters.Binary;
using System.Collections.Generic;
public static void Main()
var item = new MyClass();
var listItem1 = new ComplexList();
listItem1.pubField = "first one";
var listItem2 = new ComplexList();
listItem2.pubField = "second one";
item.ComplexList.Add(listItem1);
item.ComplexList.Add(listItem2);
var serialized = ProtoObjectToByteArray(item);
var deserialized = ProtoByteArrayToObject<MyClass>(serialized);
public static byte[] ProtoObjectToByteArray(object obj)
using (MemoryStream ms = new MemoryStream())
Serializer.Serialize(ms, obj);
public static T ProtoByteArrayToObject<T>(byte[] arrBytes)
using (MemoryStream ms = new MemoryStream(arrBytes))
return Serializer.Deserialize<T>(ms);
[Serializable, ProtoContract]
public class ComplexList {
[Serializable, ProtoContract]
public List<ComplexList> ComplexList { get; set; }
ComplexList = new List<ComplexList>();
foreach(var x in ComplexList){
Console.WriteLine(x.pubField);