public static class SerializeHelpers { /// /// Takes an array of bytes and attempts to deserialize it into an object. /// /// /// public static T DeserializeFromByteArray(byte[] source) where T : class { return DeserializeFromByteArray(source, s => { }, r => { }); } /// /// Takes an array of bytes and attempts to deserialize it into an object. /// /// /// /// /// public static T DeserializeFromByteArray(byte[] source, Action deserializingAction, Action deserializedAction) where T : class { if (source == null) throw new ArgumentNullException("source"); if (source.Length <= 0) throw new ArgumentException("Can not deserialize from an empty byte array!", "source"); if (deserializingAction == null) throw new ArgumentNullException("deserializingAction"); if (deserializedAction == null) throw new ArgumentNullException("deserializedAction"); deserializingAction(source); var ms = new MemoryStream(); ms.Write(source, 0, source.Length); ms.Seek(0, SeekOrigin.Begin); var b = new BinaryFormatter(); var result = (T)b.Deserialize(ms); deserializedAction(result); return result; } /// /// Takes any object and attempts to serialize it into an array of bytes. /// /// /// /// public static byte[] SerializeToByteArray(T source) where T : class { return SerializeToByteArray(source, s => { }, r => { }); } /// /// Takes any object and attempts to serialize it into an array of bytes. /// /// /// /// /// /// public static byte[] SerializeToByteArray(T source, Action serializingAction, Action serializedAction) where T : class { if (source == null) throw new ArgumentNullException("source"); if (serializingAction == null) throw new ArgumentNullException("serializingAction"); if (serializedAction == null) throw new ArgumentNullException("serializedAction"); serializingAction(source); var b = new BinaryFormatter(); var ms = new MemoryStream(); b.Serialize(ms, source); ms.Seek(0, SeekOrigin.Begin); var result = ms.ToArray(); serializedAction(result); return result; } /// /// Takes any object and attempts to serialize it into a string. /// /// /// /// public static string SerializeToString(T source) where T : class { return SerializeToString(source, s => { }, r => { }); } /// /// Takes any object and attempts to serialize it into a string. /// /// /// /// /// /// public static string SerializeToString(T source, Action serializingAction, Action serializedAction) where T : class { if (source == null) throw new ArgumentNullException("source"); if (serializingAction == null) throw new ArgumentNullException("serializingAction"); if (serializedAction == null) throw new ArgumentNullException("serializedAction"); serializingAction(source); string serialString = null; using (var ms1 = new System.IO.MemoryStream()) { var b = new BinaryFormatter(); b.Serialize(ms1, source); var arrayByte = ms1.ToArray(); serialString = Convert.ToBase64String(arrayByte); } serializedAction(serialString); return serialString; } /// /// Takes a string and attempts to deserialize it into an object. /// /// /// public static T DeserializeFromString(string source) where T : class { return DeserializeFromString(source, s => { }, r => { }); } /// /// Takes a string and attempts to deserialize it into an object. /// /// /// /// /// public static T DeserializeFromString(string source, Action deserializingAction, Action deserializedAction) where T : class { if (string.IsNullOrEmpty(source)) throw new ArgumentNullException("source"); if (source.Length <= 0) throw new ArgumentException("Can not deserialize from an empty byte array!", "source"); if (deserializingAction == null) throw new ArgumentNullException("deserializingAction"); if (deserializedAction == null) throw new ArgumentNullException("deserializedAction"); deserializingAction(source); T deserializedObject = null; var arrayByte = Convert.FromBase64String(source); using (var ms1 = new MemoryStream(arrayByte)) { var b = new BinaryFormatter(); deserializedObject = (T)b.Deserialize(ms1); } deserializedAction(deserializedObject); return deserializedObject; } public static string SerializeToXml(object source) { return SerializeToXml(false); } public static string SerializeToXml(object source, bool omitXmlDeclaration) { var xmlString = new StringBuilder(); var xmlSettings = new XmlWriterSettings { Encoding = new UTF8Encoding(), OmitXmlDeclaration = omitXmlDeclaration }; var xmlWriter = XmlWriter.Create(xmlString, xmlSettings); var serializer = new XmlSerializer(source.GetType()); if (xmlWriter != null) { serializer.Serialize(xmlWriter, source); xmlWriter.Close(); } return xmlString.ToString(); } public static T DeserializeFromXml(string source) where T : class { var serializer = new XmlSerializer(typeof(T)); var reader = new StringReader(source); T result = (T) serializer.Deserialize(reader); reader.Dispose(); return result; } }