Example #1
0
        public static GraphicElement DeserializeElement(Canvas canvas, string data)
        {
            XmlSerializer      xs  = new XmlSerializer(typeof(ElementPropertyBag));
            TextReader         tr  = new StringReader(data);
            ElementPropertyBag epb = (ElementPropertyBag)xs.Deserialize(tr);
            Type           t       = Type.GetType(epb.ElementName);
            GraphicElement el      = (GraphicElement)Activator.CreateInstance(t, new object[] { canvas });

            el.Deserialize(epb);        // A specific deserialization does not preserve connections.
            el.Id = Guid.NewGuid();     // We get a new GUID when deserializing a specific element.

            return(el);
        }
Example #2
0
        private static Tuple <List <GraphicElement>, List <ElementPropertyBag> > InternalDeserialize(Canvas canvas, string data)
        {
            List <GraphicElement>     elements = new List <GraphicElement>();
            XmlSerializer             xs       = new XmlSerializer(typeof(List <ElementPropertyBag>));
            TextReader                tr       = new StringReader(data);
            List <ElementPropertyBag> sps      = (List <ElementPropertyBag>)xs.Deserialize(tr);

            foreach (ElementPropertyBag epb in sps)
            {
                Type           t  = Type.GetType(epb.ElementName);
                GraphicElement el = (GraphicElement)Activator.CreateInstance(t, new object[] { canvas });
                el.Deserialize(epb);
                elements.Add(el);
                epb.Element = el;
            }

            return(new Tuple <List <GraphicElement>, List <ElementPropertyBag> >(elements, sps));
        }
Example #3
0
        /*
         * public static GraphicElement DeserializeElement(Canvas canvas, string data)
         * {
         *  XmlSerializer xs = new XmlSerializer(typeof(ElementPropertyBag));
         *  TextReader tr = new StringReader(data);
         *  ElementPropertyBag epb = (ElementPropertyBag)xs.Deserialize(tr);
         *  Type t = Type.GetType(epb.ElementName);
         *  GraphicElement el = (GraphicElement)Activator.CreateInstance(t, new object[] { canvas });
         *  el.Deserialize(epb);        // A specific deserialization does not preserve connections.
         *  el.Id = Guid.NewGuid();     // We get a new GUID when deserializing a specific element.
         *
         *  return el;
         * }
         */

        private static Tuple <List <GraphicElement>, List <ElementPropertyBag> > InternalDeserialize(Canvas canvas, string data, Dictionary <Guid, Guid> oldNewIdMap)
        {
            List <GraphicElement>     elements = new List <GraphicElement>();
            XmlSerializer             xs       = new XmlSerializer(typeof(List <ElementPropertyBag>));
            TextReader                tr       = new StringReader(data);
            List <ElementPropertyBag> sps      = (List <ElementPropertyBag>)xs.Deserialize(tr);

            foreach (ElementPropertyBag epb in sps)
            {
                Type           t  = Type.GetType(epb.ElementName, AssemblyResolver, TypeResolver);
                GraphicElement el = (GraphicElement)Activator.CreateInstance(t, new object[] { canvas });
                el.Deserialize(epb);
                Guid elGuid = el.Id;
                elGuid             = Guid.NewGuid();
                oldNewIdMap[el.Id] = elGuid;
                el.Id = elGuid;
                elements.Add(el);
                epb.Element = el;
            }

            return(new Tuple <List <GraphicElement>, List <ElementPropertyBag> >(elements, sps));
        }