Changeset 1782


Ignore:
Timestamp:
Aug 9, 2010, 2:37:28 PM (11 years ago)
Author:
kopal
Message:
  • XMLSerialization now uses GZip to compress created XML documents and GZip to decompress XML documents
Location:
trunk/CrypPlugins/WorkspaceManager/Model
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/CrypPlugins/WorkspaceManager/Model/ModelPersistance.cs

    r1755 r1782  
    4040        public static WorkspaceModel loadModel(string filename, WorkspaceManager workspaceManagerEditor)
    4141        {
    42             PersistantModel persistantModel = (PersistantModel)XMLSerialization.XMLSerialization.Deserialize(filename);
     42            PersistantModel persistantModel = (PersistantModel)XMLSerialization.XMLSerialization.Deserialize(filename,true);
    4343            WorkspaceModel workspacemodel = persistantModel.WorkspaceModel;
    4444            workspacemodel.WorkspaceManagerEditor = workspaceManagerEditor;
     
    182182                persistantModel.PersistantPluginList.Add(persistantPlugin);
    183183            }
    184             XMLSerialization.XMLSerialization.Serialize(persistantModel, filename);
     184            XMLSerialization.XMLSerialization.Serialize(persistantModel, filename,true);
    185185        }
    186186    }
  • trunk/CrypPlugins/WorkspaceManager/Model/XMLSerialization.cs

    r1740 r1782  
    2323using System.Xml;
    2424using System.Collections;
     25using System.IO.Compression;
    2526
    2627namespace XMLSerialization
     
    3435        /// Serializes the given object and all of its members to the given file using UTF-8 encoding
    3536        /// Works only on objects which are marked as "Serializable"
     37        /// If compress==true then GZip is used for compressing
    3638        /// </summary>
    3739        /// <param name="obj"></param>
    3840        /// <param name="filename"></param>
    39         public static void Serialize(object obj, string filename)
    40         {
    41             XMLSerialization.Serialize(obj, filename, Encoding.UTF8);
     41        /// /// <param name="compress"></param>
     42        public static void Serialize(object obj, string filename,bool compress = false)
     43        {
     44            XMLSerialization.Serialize(obj, filename, Encoding.UTF8,compress);
    4245        }
    4346
     
    4649        /// the given encoding
    4750        /// Works only on objects which are marked as "Serializable"
     51        /// If compress==true then GZip is used for compressing
    4852        /// </summary>
    4953        /// <param name="obj"></param>
    5054        /// <param name="filename"></param>
    51         public static void Serialize(object obj, string filename,Encoding encoding)
    52         {
    53             StreamWriter writer = new StreamWriter(filename, false, encoding, 64);
    54             XMLSerialization.Serialize(obj, writer);
    55             writer.Close();
     55        /// <param name="compress"></param>
     56        public static void Serialize(object obj, string filename,Encoding encoding,bool compress = false)
     57        {
     58
     59            FileStream sourceFile = File.OpenWrite(filename);
     60            if (compress)
     61            {
     62                GZipStream compStream = new GZipStream(sourceFile, CompressionMode.Compress);
     63                StreamWriter writer = new StreamWriter(compStream);
     64                try
     65                {
     66
     67                    XMLSerialization.Serialize(obj, writer,compress);
     68                }
     69                finally
     70                {
     71                    if (writer != null)
     72                    {
     73                        writer.Close();
     74                    }
     75                    if (compStream != null)
     76                    {
     77                        compStream.Dispose();
     78                    }
     79                    if (sourceFile != null)
     80                    {
     81                        sourceFile.Close();
     82                    }
     83                }
     84            }
     85            else
     86            {
     87                StreamWriter writer = new StreamWriter(sourceFile);
     88                try
     89                {
     90                   
     91                    XMLSerialization.Serialize(obj, writer);
     92                }
     93                finally
     94                {
     95                    if (writer != null)
     96                    {
     97                        writer.Close();
     98                    }                   
     99                    if (sourceFile != null)
     100                    {
     101                        sourceFile.Close();
     102                    }
     103                }
     104            }
    56105        }
    57106        /// <summary>
     
    61110        /// <param name="obj"></param>
    62111        /// <param name="writer"></param>
    63         public static void Serialize(object obj, StreamWriter writer)
     112        public static void Serialize(object obj, StreamWriter writer,bool compress=false)
    64113        {
    65114            HashSet<object> alreadySerializedObjects = new HashSet<object>();
    66115
    67             writer.WriteLine("<?xml version=\"1.0\" encoding=\"" +  writer.Encoding.HeaderName + "\"?>");
     116            writer.WriteLine("<?xml version=\"1.0\" encoding=\"" + writer.Encoding.HeaderName + "\"?>");
    68117            writer.WriteLine("<!--");
    69118            writer.WriteLine("     XML serialized C# Objects");
    70119            writer.WriteLine("     File created: " + System.DateTime.Now);
     120            writer.WriteLine("     File compressed: " + compress);
    71121            writer.WriteLine("     XMLSerialization created by Nils Kopal");
    72122            writer.WriteLine("     mailto: Nils.Kopal(AT)stud.uni-due.de");
     
    267317        /// </summary>
    268318        /// <param name="filename"></param>
     319        /// <param name="compress"></param>
    269320        /// <returns></returns>
    270         public static object Deserialize(String filename)
    271         {
    272             XmlDocument doc = new XmlDocument();
    273             doc.Load(filename);
    274 
    275             Dictionary<string,object> createdObjects = new Dictionary<string,object>();
     321        public static object Deserialize(String filename, bool compress=false)
     322        {
     323            FileStream sourceFile = File.OpenRead(filename);
     324            XmlDocument doc = new XmlDocument(); ;
     325            GZipStream compStream = null;
     326
     327            if (compress)
     328            {
     329                compStream = new GZipStream(sourceFile, CompressionMode.Decompress);
     330                doc.Load(compStream);
     331            }
     332            else
     333            {
     334                doc.Load(sourceFile);
     335            }
     336
     337            try
     338            {
     339                return XMLSerialization.Deserialize(doc);
     340            }
     341            finally
     342            {
     343                if (compStream != null)
     344                {
     345                    compStream.Close();
     346                }
     347            }
     348        }
     349
     350        /// <summary>
     351        /// Deserializes the given XMLDocument and returns the root as obj
     352        /// </summary>
     353        /// <param name="doc"></param>
     354        /// <returns></returns>
     355        public static object Deserialize(XmlDocument doc)
     356        {
     357            Dictionary<string, object> createdObjects = new Dictionary<string, object>();
    276358            LinkedList<object[]> links = new LinkedList<object[]>();
    277359
     
    283365                XmlNode id = objct.ChildNodes[1];
    284366                XmlNode members = objct.ChildNodes[2];
    285                
     367
    286368                object newObject = System.Activator.CreateInstance(Type.GetType(type.InnerText));
    287                 createdObjects.Add(id.InnerText,newObject);
    288                
     369                createdObjects.Add(id.InnerText, newObject);
     370
    289371                foreach (XmlNode member in members.ChildNodes)
    290372                {
     
    299381                        if (RevertXMLSymbols(membertype.InnerText).Equals("System.String"))
    300382                        {
    301                            
     383
    302384                            newObject.GetType().GetField(RevertXMLSymbols(membername.InnerText),
    303385                                BindingFlags.NonPublic |
     
    361443                        else if (RevertXMLSymbols(membertype.InnerText).Equals("System.Windows.Point"))
    362444                        {
    363                             string[] values = value.InnerText.Split(new char[]{';'});
    364                            
     445                            string[] values = value.InnerText.Split(new char[] { ';' });
     446
    365447                            double x = 0;
    366448                            double y = 0;
     
    368450                            double.TryParse(values[1], out y);
    369451
    370                             System.Windows.Point result = new System.Windows.Point(x,y);                           
     452                            System.Windows.Point result = new System.Windows.Point(x, y);
    371453                            newObject.GetType().GetField(RevertXMLSymbols(membername.InnerText),
    372454                                BindingFlags.NonPublic |
     
    387469                        XmlNode reference = member.ChildNodes[2];
    388470                        links.AddLast(new object[] {
    389                             newObject,
    390                             RevertXMLSymbols(membername.InnerText),
    391                             RevertXMLSymbols(reference.InnerText),
    392                             false});
     471                                newObject,
     472                                RevertXMLSymbols(membername.InnerText),
     473                                RevertXMLSymbols(reference.InnerText),
     474                                false});
    393475                    }
    394476                    else if (member.ChildNodes[2].Name.Equals("list"))
    395                     {                       
     477                    {
    396478                        newmember = System.Activator.CreateInstance(Type.GetType(RevertXMLSymbols(membertype.InnerText)));
    397479                        newObject.GetType().GetField(RevertXMLSymbols(membername.InnerText),
     
    406488                                XmlNode reference = entry.ChildNodes[1];
    407489                                links.AddLast(new object[] {
    408                                 newObject,
    409                                 RevertXMLSymbols(membername.InnerText),
    410                                 RevertXMLSymbols(reference.InnerText),
    411                                 true});
     490                                    newObject,
     491                                    RevertXMLSymbols(membername.InnerText),
     492                                    RevertXMLSymbols(reference.InnerText),
     493                                    true});
    412494                            }
    413495                            else
     
    418500                                {
    419501
    420                                    ((IList)newmember).Add(RevertXMLSymbols(value.InnerText));
     502                                    ((IList)newmember).Add(RevertXMLSymbols(value.InnerText));
    421503                                }
    422504                                else if (RevertXMLSymbols(typ.InnerText).Equals("System.Int16"))
     
    449531                                    System.Char.TryParse(RevertXMLSymbols(value.InnerText), out result);
    450532                                    ((IList)newmember).Add(result);
    451                                 }                               
     533                                }
    452534                            }
    453535                        }
     
    456538            }
    457539
    458             foreach(object[] triple in links){
    459                
     540            foreach (object[] triple in links)
     541            {
     542
    460543                object obj = triple[0];
    461                 string membername = (string)triple[1];               
     544                string membername = (string)triple[1];
    462545                string reference = (string)triple[2];
    463546                bool isList = (bool)triple[3];
     
    473556                    if (obj != null && obj2 != null)
    474557                    {
    475                         FieldInfo fieldInfo = obj.GetType().GetField(membername, 
     558                        FieldInfo fieldInfo = obj.GetType().GetField(membername,
    476559                            BindingFlags.NonPublic |
    477560                            BindingFlags.Public |
    478561                            BindingFlags.Instance);
    479                        
    480                             fieldInfo.SetValue(obj, obj2);
     562
     563                        fieldInfo.SetValue(obj, obj2);
    481564                    }
    482565                }
Note: See TracChangeset for help on using the changeset viewer.