//using System;
//using System.IO;
//using System.Runtime.Serialization;
//using System.Runtime.Serialization.Formatters.Binary;

//namespace HRD.WebApi.Extensions
//{
//    /// <summary>
//    /// Reference Article http://www.codeproject.com/KB/tips/SerializedObjectCloner.aspx
//    /// Provides a method for performing a deep copy of an object.
//    /// Binary Serialization is used to perform the copy.
//    /// </summary>
//    public static class SystemExtensions
//    {
//        /// <summary>
//        /// Perform a deep Copy of the object.
//        /// </summary>
//        /// <typeparam name="T">The type of object being copied.</typeparam>
//        /// <param name="source">The object instance to copy.</param>
//        /// <returns>The copied object.</returns>
//        public static T Clone<T>(this T source)
//        {
//            if (!typeof(T).IsSerializable)
//            {
//                throw new ArgumentException("The type must be serializable.", nameof(source));
//            }

//            // Don't serialize a null object, simply return the default for that object
//            if (Object.ReferenceEquals(source, null))
//            {
//                return default;
//            }

//            IFormatter formatter = new BinaryFormatter();
//            Stream stream = new MemoryStream();
//            using (stream)
//            {
//                formatter.Serialize(stream, source);
//                stream.Seek(0, SeekOrigin.Begin);
//                return (T)formatter.Deserialize(stream);
//            }
//        }

//    }
//}