public static List <Student> CreateProtoReaderBuffer(byte[] encoded) { using (MemoryStream rs = new MemoryStream(encoded)) { ProtoReader.State pr = ProtoReader.State.Create(rs, null, null); List <Student> students = new List <Student>(); Student student = new Student(); while (pr.GetPosition() < rs.Length) { var fieldHeader = pr.ReadFieldHeader(); if (fieldHeader == 1) { student = new Student(); students.Add(student); } if (fieldHeader == 1) { student.Id = BclHelpers.ReadGuid(ref pr); } else if (fieldHeader == 2) { student.Name = pr.ReadString(); } else if (fieldHeader == 3) { student.AdmissionDate = BclHelpers.ReadDateTime(ref pr); } else if (fieldHeader == 4) { student.Age = pr.ReadInt32(); } } return(students); } }
protected override bool TryDeserializeRoot(TypeModel model, ref ProtoReader.State state, ref object value, bool autoCreate) { var serializer = TypeModel.TryGetSerializer <T>(model); if (serializer == null) { return(false); } // note FromObject is non-trivial; for value-type T it promotes the null to a default; we might not want that, // depending on the value of autoCreate bool resetToNullIfNotMoved = !autoCreate && value == null; var oldPos = state.GetPosition(); value = state.DeserializeRoot <T>(TypeHelper <T> .FromObject(value), serializer); if (resetToNullIfNotMoved && oldPos == state.GetPosition()) { value = null; } return(true); }