C# 序列化和反序列化System.Windows.Controls.UIElementCollection

C# 序列化和反序列化System.Windows.Controls.UIElementCollection,c#,wpf,C#,Wpf,我从WPF中的System.Windows.Controls.Canvas对象中获得了一个System.Windows.Controls.UIElementCollection,它包含许多System.Windows.Shape对象 我试图实现的是在画布中序列化这些对象,然后在以后反序列化它们:就像保存/加载一样 序列化代码: 反序列化代码: 序列化似乎很好,但反序列化会出现以下错误: 在类型“System.Windows.Controls.UIElementCollection”上找不到匹配的

我从WPF中的System.Windows.Controls.Canvas对象中获得了一个System.Windows.Controls.UIElementCollection,它包含许多System.Windows.Shape对象

我试图实现的是在画布中序列化这些对象,然后在以后反序列化它们:就像保存/加载一样

序列化代码: 反序列化代码: 序列化似乎很好,但反序列化会出现以下错误:

在类型“System.Windows.Controls.UIElementCollection”上找不到匹配的构造函数。您可以使用参数或FactoryMethod指令构造此类型。“行号“1”和行位置“22”

我从概念上理解,UIElementCollection没有无参数构造函数,因为它需要两个参数:

UIElementCollection(UIElement visualParent, FrameworkElement logicalParent);
当UIElementCollection被反序列化时,如何注入这些参数?还是我走错了方向? 谢谢


小编辑:我之所以认为这是可能的,是因为这个库:似乎能够完全满足这种情况,但我不知道它是如何做到的,似乎有一些反射魔法。

人们应该停止序列化UI…它只是非常简单的System.Windows.Shape对象。您有没有其他建议不涉及自定义格式的形状保护程序?通常,您应该已经有一个支持UI的数据模型,并将其序列化。WPF支持MVVM,因此为您的形状创建一个模型,使用该模型显示形状,然后您可以序列化/反序列化您的模型。我在创建
UI
-属性和其他属性时将数据保存到
数据库中,然后如果需要重新创建它,我将基于
DB
中的对象构建
UI
var sr = new StreamReader(@"C:\data.xaml");
var xmlReader = new XmlTextReader(sr);
var xamlReader = XamlReader.Load(xmlReader);
UIElementCollection(UIElement visualParent, FrameworkElement logicalParent);