IResourceData ReadResourceData(List <UserResourceType> userTypes, int size) { uint code = ReadUInt32(reader); switch ((ResourceTypeCode)code) { case ResourceTypeCode.Null: return(resourceDataCreator.CreateNull()); case ResourceTypeCode.String: return(resourceDataCreator.Create(reader.ReadString())); case ResourceTypeCode.Boolean: return(resourceDataCreator.Create(reader.ReadBoolean())); case ResourceTypeCode.Char: return(resourceDataCreator.Create((char)reader.ReadUInt16())); case ResourceTypeCode.Byte: return(resourceDataCreator.Create(reader.ReadByte())); case ResourceTypeCode.SByte: return(resourceDataCreator.Create(reader.ReadSByte())); case ResourceTypeCode.Int16: return(resourceDataCreator.Create(reader.ReadInt16())); case ResourceTypeCode.UInt16: return(resourceDataCreator.Create(reader.ReadUInt16())); case ResourceTypeCode.Int32: return(resourceDataCreator.Create(reader.ReadInt32())); case ResourceTypeCode.UInt32: return(resourceDataCreator.Create(reader.ReadUInt32())); case ResourceTypeCode.Int64: return(resourceDataCreator.Create(reader.ReadInt64())); case ResourceTypeCode.UInt64: return(resourceDataCreator.Create(reader.ReadUInt64())); case ResourceTypeCode.Single: return(resourceDataCreator.Create(reader.ReadSingle())); case ResourceTypeCode.Double: return(resourceDataCreator.Create(reader.ReadDouble())); case ResourceTypeCode.Decimal: return(resourceDataCreator.Create(reader.ReadDecimal())); case ResourceTypeCode.DateTime: return(resourceDataCreator.Create(new DateTime(reader.ReadInt64()))); case ResourceTypeCode.TimeSpan: return(resourceDataCreator.Create(new TimeSpan(reader.ReadInt64()))); case ResourceTypeCode.ByteArray: return(resourceDataCreator.Create(reader.ReadBytes(reader.ReadInt32()))); case ResourceTypeCode.Stream: return(resourceDataCreator.CreateStream(reader.ReadBytes(reader.ReadInt32()))); default: int userTypeIndex = (int)(code - (uint)ResourceTypeCode.UserTypes); if (userTypeIndex < 0 || userTypeIndex >= userTypes.Count) { throw new ResourceReaderException(string.Format("Invalid resource data code: {0}", code)); } return(resourceDataCreator.CreateSerialized(reader.ReadBytes(size))); } }