public T DeserializeFromFile(string FileName, BasicFileInformation FileInfo, ObjectSerializer <T> .SerializeType Type, bool isZip)
        {
            T          ret = default(T);
            FileStream fs  = new FileStream(FileName, FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite);

            fs.Seek(BasicInformationSize(FileInfo), SeekOrigin.Begin);
            Stream SourceStream;

            if (FileInfo.SavePassword.Length > 0)
            {
                CryptoStream cs = DesCooler.CreateDecryptStream(FileInfo.SavePassword, fs);
                if (isZip)
                {
                    SourceStream = new ICSharpCode.SharpZipLib.BZip2.BZip2InputStream(cs);
                }
                else
                {
                    SourceStream = cs;
                }
            }
            else
            {
                if (isZip)
                {
                    SourceStream = new ICSharpCode.SharpZipLib.BZip2.BZip2InputStream(fs);
                }
                else
                {
                    SourceStream = fs;
                }
            }
            try
            {
                switch (Type)
                {
                case ObjectSerializer <T> .SerializeType.JSON: ret = Deserialize_JSON(SourceStream); break;

                case ObjectSerializer <T> .SerializeType.Binary: ret = Deserialize_Binary(SourceStream); break;
                }
            }
            catch (Exception e) { fs.Close(); throw e; return(ret); }
            try
            {
                SourceStream.Close();
            }
            catch {; }
            fs.Close();
            if (ret != null)
            {
                BasicFileInformation bfi = GetBasicFileInformation(ret);
                if (bfi != null)
                {
                    bfi.VersionString   = FileInfo.VersionString;
                    bfi.IntroduceText   = FileInfo.IntroduceText;
                    bfi.ProjectFilePath = (new System.IO.FileInfo(FileName)).FullName;
                }
            }
            return(ret);
        }
        public void SerializeToFile(T Object, string FileName, SerializeType Type, bool isZip)
        {
            FileStream           msObj = new FileStream(FileName, FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite);
            BasicFileInformation bfi   = GetBasicFileInformation(Object);
            string pwd = bfi.SavePassword;

            WriteBasicInformation(Object, msObj);
            Stream TargetStream;

            if (pwd.Length > 0)
            {
                CryptoStream cs = DesCooler.CreateEncryptStream(pwd, msObj);
                if (isZip)
                {
                    TargetStream = new ICSharpCode.SharpZipLib.BZip2.BZip2OutputStream(cs);
                }
                else
                {
                    TargetStream = cs;
                }
            }
            else
            {
                if (isZip)
                {
                    TargetStream = new ICSharpCode.SharpZipLib.BZip2.BZip2OutputStream(msObj);
                }
                else
                {
                    TargetStream = msObj;
                }
            }
            try
            {
                switch (Type)
                {
                case SerializeType.JSON: Serialize_JSON(Object, TargetStream); break;

                case SerializeType.Binary: Serialize_Binary(Object, TargetStream); break;
                }
            }
            catch {; }
            TargetStream.Flush();
            TargetStream.Close();
            msObj.Close();
        }