Example #1
0
 public static object ReadFromStream(this Type type, CodedInputStream input)
 {
     if (_readHandlers.TryGetValue(type, out var h))
     {
         return(h(input));
     }
     else if (type.IsPbMessageType())
     {
         var obj = (IMessage)Activator.CreateInstance(type);
         input.ReadMessage(obj);
         return(obj);
     }
     else if (type.IsUserType())
     {
         var obj    = (UserType)Activator.CreateInstance(type);
         var holder = new UserTypeHolder();
         input.ReadMessage(holder);
         obj.Unpack(holder);
         return(obj);
     }
     else
     {
         throw new Exception($"Unable to read for type {type}.");
     }
 }
Example #2
0
 public void Unpack(UserTypeHolder holder)
 {
     foreach (var fi in GetFieldInfos())
     {
         var val = fi.Packer.Unpack(holder.Fields[fi.Name]);
         fi.FieldInfo.SetValue(this, val);
     }
 }
Example #3
0
        public static T DeserializeToUserType <T>(this byte[] bytes) where T : UserType, new()
        {
            var obj = new T();
            var msg = new UserTypeHolder();

            msg.MergeFrom(bytes);
            obj.Unpack(msg);
            return(obj);
        }
Example #4
0
        public UserTypeHolder Pack()
        {
            var holder = new UserTypeHolder();

            foreach (var fi in GetFieldInfos())
            {
                var val = fi.FieldInfo.GetValue(this);
                holder.Fields.Add(fi.Name, fi.Packer.Pack(val));
            }
            return(holder);
        }