Exemplo n.º 1
0
        private static SerialisationFormat _GetFormat(string fn, SerialisationFormat format)
        {
            if (format != SerialisationFormat.Infer)
            {
                return(format);
            }

            switch (Path.GetExtension(fn).ToUpper())
            {
            case ".DAT":
            case ".MDAT":
            case ".MDAT-BIN":
            case ".MRES-BIN":
                return(SerialisationFormat.MsnrbfBinary);

            case ".MDAT-MBIN":
            case ".MRES-MBIN":
                return(SerialisationFormat.MSerialiserBinary);

            case ".MRES":
            case ".MDAT-CBIN":
            case ".MRES-CBIN":
                return(SerialisationFormat.MSerialiserCompactBinary);

            case ".MDAT-FBIN":
            case ".MRES-FBIN":
                return(SerialisationFormat.MSerialiserFastBinary);

            case ".MDAT-TXT":
            case ".MRES-TXT":
            case ".TXT":
                return(SerialisationFormat.MSerialiserText);

            case ".MDAT-CON":
            case ".MRES-CON":
                return(SerialisationFormat.DataContract);

            case ".MDAT-XML":
            case ".MRES-XML":
            case ".XML":
                return(SerialisationFormat.Xml);

            case ".INI":
                return(SerialisationFormat.Ini);

            default:
                throw new InvalidOperationException($"A request was made to determine the filetype of a file based on its extension, but that extension could not be found in the lookup table. The filename in question is \"{fn}\".");
            }
        }
Exemplo n.º 2
0
        private static void _Serialise <T>(T data, Stream s, SerialisationFormat format, ObjectSerialiser serialiser, ProgressReporter prog)
        {
            switch (format)
            {
            case SerialisationFormat.MSerialiserBinary:
                MSerialiser.SerialiseStream(s, data, ETransmission.Binary, new[] { serialiser }, null);
                return;

            case SerialisationFormat.MSerialiserText:
                MSerialiser.SerialiseStream(s, data, ETransmission.Text, new[] { serialiser }, null);
                return;

            case SerialisationFormat.MSerialiserCompactBinary:
                MSerialiser.SerialiseStream(s, data, ETransmission.CompactBinary, new[] { serialiser }, null);
                return;

            case SerialisationFormat.MSerialiserFastBinary:
                MSerialiser.SerialiseStream(s, data, ETransmission.FastBinary, new[] { serialiser }, null);
                return;

            case SerialisationFormat.Xml:
                var xs = _CreateXmlSerialiser <T>();
                xs.Serialize(s, data);
                break;

            case SerialisationFormat.DataContract:
                var dcs = _CreateDataContactSerialiser <T>();
                dcs.WriteObject(s, (object)data);
                break;

            case SerialisationFormat.MsnrbfBinary:
                var bcs = new BinaryFormatter();
                bcs.Serialize(s, data);
                break;

            case SerialisationFormat.Ini:
                IniSerialiser.Serialise(s, data);
                break;

            default:
                throw new InvalidOperationException("Invalid switch: " + format);
            }
        }
Exemplo n.º 3
0
        private static T _Deserialise <T>(Stream s, SerialisationFormat format, ObjectSerialiser serialiser, ProgressReporter prog)
        {
            switch (format)
            {
            case SerialisationFormat.MSerialiserBinary:
                return(MSerialiser.DeserialiseStream <T>(s, ETransmission.Binary, new[] { serialiser }, null));

            case SerialisationFormat.MSerialiserText:
                return(MSerialiser.DeserialiseStream <T>(s, ETransmission.Text, new[] { serialiser }, null));

            case SerialisationFormat.MSerialiserCompactBinary:
                return(MSerialiser.DeserialiseStream <T>(s, ETransmission.CompactBinary, new[] { serialiser }, null));

            case SerialisationFormat.MSerialiserFastBinary:
                return(MSerialiser.DeserialiseStream <T>(s, ETransmission.FastBinary, new[] { serialiser }, null));

            case SerialisationFormat.Xml:
                var xs = _CreateXmlSerialiser <T>();
                return((T)xs.Deserialize(s));

            case SerialisationFormat.DataContract:
                var dcs = _CreateDataContactSerialiser <T>();
                return((T)dcs.ReadObject(s));

            case SerialisationFormat.MsnrbfBinary:
                var bcs = new BinaryFormatter();
                // bcs.Binder = new TypeNameConverter(); - We don't do this anymore, backwards compatibility ends up taking most of the development time.
                return((T)bcs.Deserialize(s));

            case SerialisationFormat.Ini:
                return(IniSerialiser.Deserialise <T>(s));

            default:
                throw new InvalidOperationException("Invalid switch: " + format);
            }
        }
Exemplo n.º 4
0
 public FileDescriptor(string fileName, SerialisationFormat format)
 {
     this.FileName = fileName;
     this.Format   = _GetFormat(fileName, format);
 }