public static Packer.Meta UnpackDirect(Packer packer)
        {
            var meta = new Packer.Meta();

            meta.metaTypeId = 0;
            meta.meta       = new Dictionary <System.Type, Packer.MetaType>();
            meta.typeById   = new Dictionary <int, System.Type>();

            var asms = System.AppDomain.CurrentDomain.GetAssemblies();
            var arr  = MetaTypeArraySerializer.UnpackDirect(packer);

            for (int i = 0; i < arr.Length; ++i)
            {
                var data = arr[i];
                for (int j = 0; j < asms.Length; ++j)
                {
                    var type = asms[j].GetType(data.type);
                    if (type != null)
                    {
                        meta.meta.Add(type, data);
                        meta.typeById.Add(data.id, type);
                        break;
                    }
                }
            }

            return(meta);
        }
        public static void PackDirect(Packer packer, Packer.Meta meta)
        {
            var arr = new Packer.MetaType[meta.meta.Count];
            var i   = 0;

            foreach (var kv in meta.meta)
            {
                arr[i++] = kv.Value;
            }

            MetaTypeArraySerializer.PackDirect(packer, arr);
        }
 public object Unpack(Packer packer)
 {
     return(MetaTypeArraySerializer.UnpackDirect(packer));
 }
        public void Pack(Packer packer, object obj)
        {
            var meta = (Packer.MetaType[])obj;

            MetaTypeArraySerializer.PackDirect(packer, meta);
        }