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);
     }
 }
Beispiel #2
0
            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);
            }