/// <summary> /// /// </summary> /// <typeparam name="T"></typeparam> /// <param name="obj"></param> /// <param name="pathSpec"></param> /// <param name="serializationFormatterEnum"></param> public static void SerializeToFile <T>(T obj, string pathSpec, SerializationFormatterEnum serializationFormatterEnum) { try { switch (serializationFormatterEnum) { case (SerializationFormatterEnum.Binary): /* * using (FileStream fs = File.Open("MyFile.txt", FileMode.Open, FileAccess.Read, FileShare.None)) * { * // use fs * } */ using (var fs = new FileStream(pathSpec, FileMode.Create, FileAccess.Write, FileShare.Write)) (new BinaryFormatter()).Serialize(fs, obj); break; case (SerializationFormatterEnum.Xml): var serializer = new XmlSerializer(typeof(T)); TextWriter textWriter = new StreamWriter(pathSpec); serializer.Serialize(textWriter, obj); textWriter.Close(); break; default: throw new Exception("Invalid Formatter option"); } } catch (SerializationException sX) { var errMsg = $"Unable to serialize {obj} into file {pathSpec}"; throw new Exception(errMsg, sX); } catch (Exception ex) { var errMsg = $"Unable to serialize {obj} into file {pathSpec}. Detail: {ex.Message}"; throw new Exception(errMsg, ex); } }
/// <summary> /// /// </summary> /// <typeparam name="T"></typeparam> /// <param name="pathSpec"></param> /// <param name="serializationFormatterEnum"></param> /// <returns></returns> public static T DeserializeFromFile <T>(string pathSpec, SerializationFormatterEnum serializationFormatterEnum) where T : class { try { switch (serializationFormatterEnum) { case (SerializationFormatterEnum.Binary): using (var strm = new FileStream(pathSpec, FileMode.Open, FileAccess.Read)) { IFormatter fmt = new BinaryFormatter(); var o = fmt.Deserialize(strm); if (!(o is T)) { throw new ArgumentException("Bad Data File"); } return(o as T); } case (SerializationFormatterEnum.Xml): TextReader rdr = new StreamReader(pathSpec); var serializer = new XmlSerializer(typeof(T)); var obj = (T)serializer.Deserialize(rdr); rdr.Close(); return(obj); default: throw new Exception("Invalid Formatter option"); } } catch (SerializationException sX) { var errMsg = $"Unable to deserialize {typeof (T)} from file {pathSpec}"; throw new Exception(errMsg, sX); } }