示例#1
0
        internal static void LoadEditor(EditorCanvas canvas, string id)
        {
            var bytes = MemopadApplication.Instance.MemoAccessor.LoadMemento(id);

            //using (var stream = new MemoryStream(bytes))
            //using (var reader = XmlDictionaryReader.CreateBinaryReader(stream, XmlDictionaryReaderQuotas.Max)) {

            //    var knownTypes = new [] {
            //        typeof(Memo),
            //        typeof(Dictionary<string, object>),
            //        typeof(List<IMemento>),
            //        typeof(System.Drawing.Rectangle),
            //        typeof(Mkamo.Common.Forms.Descriptions.FontDescription),
            //    };

            //    var ser = new DataContractSerializer(typeof(Memento), knownTypes);
            //    var mem = (IMemento) ser.ReadObject(reader);
            //    canvas.LoadContent(mem, new MemoModelSerializer());
            //}

            using (var stream = new MemoryStream(bytes)) {
                var formatter = new BinaryFormatter();
                //formatter.Binder = new DelegatingSerializationBinder(
                //    (assemName, typeName) => {
                //        typeName = typeName.Replace("PublicKeyToken=null", "PublicKeyToken=89184b2d63ba68a6");
                //        var name = new AssemblyName(assemName);
                //        var assem = default(Assembly);
                //        try {
                //            assem = Assembly.Load(name.Name);
                //        } catch {
                //            assem = Assembly.Load(name);
                //        }
                //        return assem.GetType(typeName);
                //    }
                //);
                var mem = formatter.Deserialize(stream) as IMemento;

                //var serializer = new NetDataContractSerializer();
                //var mem = serializer.Deserialize(stream) as IMemento;

                canvas.LoadContent(mem, new MemoModelSerializer());
            }
        }