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); }