internal Object LoadObjectV1(int pos)
{
BCLDebug.Assert(_store != null, "ResourceReader is closed!");
BCLDebug.Assert(_version == 1, ".resources file was not a V1 .resources file!");
_store.BaseStream.Seek(_dataSectionOffset+pos, SeekOrigin.Begin);
int typeIndex = _store.Read7BitEncodedInt();
if (typeIndex == -1)
return null;
Type type = FindType(typeIndex);
BCLDebug.Log("RESMGRFILEFORMAT", "LoadObject type: "+type.Name+" pos: 0x"+_store.BaseStream.Position.ToString("x", CultureInfo.InvariantCulture));
if (type == typeof(String))
return _store.ReadString();
else if (type == typeof(Int32))
return _store.ReadInt32();
else if (type == typeof(Byte))
return _store.ReadByte();
else if (type == typeof(SByte))
return _store.ReadSByte();
else if (type == typeof(Int16))
return _store.ReadInt16();
else if (type == typeof(Int64))
return _store.ReadInt64();
else if (type == typeof(UInt16))
return _store.ReadUInt16();
else if (type == typeof(UInt32))
return _store.ReadUInt32();
else if (type == typeof(UInt64))
return _store.ReadUInt64();
else if (type == typeof(Single))
return _store.ReadSingle();
else if (type == typeof(Double))
return _store.ReadDouble();
else if (type == typeof(DateTime)) {
// Ideally we should use DateTime's ToBinary & FromBinary,
// but we can't for compatibility reasons.
return new DateTime(_store.ReadInt64());
}
else if (type == typeof(TimeSpan))
return new TimeSpan(_store.ReadInt64());
else if (type == typeof(Decimal)) {
int[] bits = new int[4];
for(int i=0; i<bits.Length; i++)
bits[i] = _store.ReadInt32();
return new Decimal(bits);
}
else {
return DeserializeObject(typeIndex);
}
}