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}\"."); } }
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); } }
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); } }
public FileDescriptor(string fileName, SerialisationFormat format) { this.FileName = fileName; this.Format = _GetFormat(fileName, format); }