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) { 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)); }
/* * 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)); }