public object GetProperty(string id, bool multiple = false)
        {
            if (this._extraProperties == null)
            {
                return((object)null);
            }
            List <object> list = (List <object>)null;

            this._extraProperties.TryGetValue(id, out list);
            if (list != null)
            {
                foreach (object obj in list)
                {
                    if (obj is BinaryClassChunk)
                    {
                        BinaryClassChunk binaryClassChunk = obj as BinaryClassChunk;
                        if (binaryClassChunk._result == DeserializeResult.HeaderDeserialized)
                        {
                            binaryClassChunk.Deserialize();
                        }
                    }
                    if (obj is BitBuffer)
                    {
                        (obj as BitBuffer).SeekToStart();
                    }
                    if (!multiple)
                    {
                        return(obj);
                    }
                }
            }
            return((object)list);
        }
        private Array DeserializeArray(System.Type type, System.Type arrayType, BitBuffer data)
        {
            int   num      = this._data.ReadInt();
            Array instance = Activator.CreateInstance(type, (object)num) as Array;

            for (int index = 0; index < num; ++index)
            {
                bool   flag = this._data.ReadBool();
                object obj  = (object)null;
                if (flag)
                {
                    if (typeof(BinaryClassChunk).IsAssignableFrom(arrayType))
                    {
                        BinaryClassChunk binaryClassChunk = BinaryClassChunk.DeserializeHeader(arrayType, this._data, root: false, skipData: true);
                        binaryClassChunk?.Deserialize();
                        obj = (object)binaryClassChunk;
                    }
                    else
                    {
                        obj = this._data.Read(arrayType);
                    }
                }
                instance.SetValue(obj, index);
            }
            return(instance);
        }
 public static BinaryClassChunk DeserializeHeader(
     System.Type t,
     BitBuffer data,
     BinaryClassChunk target = null,
     bool root     = true,
     bool skipData = false)
 {
     if (target == null)
     {
         target = Activator.CreateInstance(t, (object[])null) as BinaryClassChunk;
     }
     try
     {
         long num1 = 0;
         if (root)
         {
             num1 = data.ReadLong();
             if (num1 != BinaryClassChunk.MagicNumber(t) && num1 != 5033950674723417L)
             {
                 target._result = DeserializeResult.InvalidMagicNumber;
                 return(target);
             }
             target._checksum = data.ReadUInt();
         }
         ushort num2 = data.ReadUShort();
         ushort num3 = BinaryClassChunk.ChunkVersion(t);
         if ((int)num2 != (int)num3 && (!(target is LevelData) || num2 != (ushort)2))
         {
             target._result = (int)num2 <= (int)num3 ? DeserializeResult.FileVersionTooOld : DeserializeResult.FileVersionTooNew;
             return(target);
         }
         if (num2 == (ushort)2 && target is LevelData && data.ReadBool())
         {
             BinaryClassChunk binaryClassChunk = BinaryClassChunk.DeserializeHeader(Editor.GetType(data.ReadString()), data, root: false);
             if (binaryClassChunk != null && binaryClassChunk._result == DeserializeResult.HeaderDeserialized)
             {
                 binaryClassChunk.Deserialize();
                 target._headerDictionary["metaData"] = binaryClassChunk;
             }
         }
         target._magicNumber = num1;
         target._version     = num2;
         target._size        = data.ReadUInt();
         target._offset      = (uint)data.position;
         target._data        = data;
         target._result      = DeserializeResult.HeaderDeserialized;
         if (skipData)
         {
             data.position = (int)target._offset + (int)target._size;
         }
         return(target);
     }
     catch (Exception ex)
     {
         target._exception = ex;
         target._result    = DeserializeResult.ExceptionThrown;
         return(target);
     }
 }
        public T GetChunk <T>(string name)
        {
            BinaryClassChunk binaryClassChunk = (BinaryClassChunk)null;

            if (!this._headerDictionary.TryGetValue(name, out binaryClassChunk))
            {
                if (this._data != null)
                {
                    return(default(T));
                }
                binaryClassChunk             = Activator.CreateInstance(typeof(T), (object[])null) as BinaryClassChunk;
                binaryClassChunk._result     = DeserializeResult.Success;
                this._headerDictionary[name] = binaryClassChunk;
            }
            if (binaryClassChunk == null)
            {
                return(default(T));
            }
            if (binaryClassChunk._result == DeserializeResult.HeaderDeserialized)
            {
                binaryClassChunk.Deserialize();
            }
            return((T)(Object)binaryClassChunk);
        }