static void ExtractSERI(BinaryReader Reader, string OutputFile, uint StringTableOffset, uint StringPointersOffset, uint SERIOffset) { SERI Output = new SERI(); Reader.BaseStream.Seek(SERIOffset, SeekOrigin.Begin); string SERISignature = ReadString(Reader, 4); uint ValuesOffset = SERIOffset + Reader.ReadUInt32() + 4; ushort ParametersCount = Reader.ReadUInt16(); uint TypesTableOffset = ValuesOffset - ParametersCount; for (int Index = 0; Index < ParametersCount; Index++) { Reader.BaseStream.Seek(SERIOffset + 0xa + Index * 4, SeekOrigin.Begin); ushort NameOffset = Reader.ReadUInt16(); ushort ValueOffset = Reader.ReadUInt16(); string Name = ReadNullTerminatedString(Reader, StringTableOffset + NameOffset); Reader.BaseStream.Seek(TypesTableOffset + Index, SeekOrigin.Begin); char ValueType = Reader.ReadChar(); Output.Add(ParseSERI(Reader, StringTableOffset, StringPointersOffset, ValuesOffset, ValueOffset, ValueType, Name)); } XmlSerializer Serializer = new XmlSerializer(typeof(SERI)); using (FileStream OutFile = new FileStream(OutputFile + ".xml", FileMode.Create)) { Serializer.Serialize(OutFile, Output); } }