我从 WPF 中的System.Windows.Controls.Canvas对象获取System.Windows.Controls.UIElementCollection,它包含很多System.Windows.Shape对象
我想要实现的是在画布中序列化这些对象,然后再反序列化它们:就像保存/加载一样。
序列化代码:
var items = view.myCanvas.Children;
var mystrXaml = XamlWriter.Save(items);
var fs = File.Create(@"C:\data.xaml");
var sw = new StreamWriter(fs);
sw.Write(mystrXaml);
sw.Close();
fs.Close();
反序列化代码:
var sr = new StreamReader(@"C:\data.xaml");
var xmlReader = new XmlTextReader(sr);
var xamlReader = XamlReader.Load(xmlReader);
序列化似乎很好,而反序列化会出现此错误:
在类型“System.Windows.Controls.UIElementCollection”上找不到匹配的构造函数。您可以使用 Arguments 或 FactoryMethod 指令来构造此类型。行号“1”和行位置“22”。
我从概念上理解UIElementCollection没有无参数构造函数,因为它需要两个参数:
UIElementCollection(UIElement visualParent, FrameworkElement logicalParent);
如何在 UIElementCollection 反序列化时注入这些参数?还是我以错误的方式解决这个问题?
谢谢
小编辑:我认为这是可能的原因是因为这个库: http: //www.codeproject.com/Articles/620154/UniversalSerializer似乎能够完全满足这种情况,但我无法弄清楚它是怎么做到的,似乎有一些反射魔法。