Windows runtime WinRT:有没有办法(Json、XML)在C#中序列化XAML UIElement?

Windows runtime WinRT:有没有办法(Json、XML)在C#中序列化XAML UIElement?,windows-runtime,windows-store-apps,winrt-xaml,win-universal-app,Windows Runtime,Windows Store Apps,Winrt Xaml,Win Universal App,我试图保存XAML UIElement的属性(网格、按钮、文本块等等),并通过保存整个控件再次恢复它。。 因此,我的第一个选择是对控件进行JSONize-序列化-并将其保存为字符串,然后通过Newtonsoft.Json中的JsonConvert方法恢复它: 这是我的密码: Grid grid = new Grid { Background = new SolidColorBrush(Colors.Red), Margin = new Thickness(0, 5, 0, 0) }; strin

我试图保存XAML UIElement的属性(网格、按钮、文本块等等),并通过保存整个控件再次恢复它。。 因此,我的第一个选择是对控件进行JSONize-序列化-并将其保存为字符串,然后通过Newtonsoft.Json中的JsonConvert方法恢复它:

这是我的密码:

Grid grid = new Grid { Background = new SolidColorBrush(Colors.Red), Margin = new Thickness(0, 5, 0, 0) };
string jsonStringGrid = JsonConvert.SerializeObject(grid);
但是,一个奇怪的例外是:

“System.StackOverflowException”类型的未处理异常 发生在mscorlib.ni.dll中

然后,我尝试使用我想要的属性创建一个类,因此无需序列化整个网格,只需创建我的新类:

 public class MyGridClass
        {
            public Brush Background { get; set; }
            public Thickness Margin { get; set; }
        }
没有复杂的类型和属性。。但同样的例外再次发生

然后我尝试将
画笔
类型更改为一个
字符串
,只使用“红色”来测试它,然后我尝试序列化它,它开始工作了

刷子类型有什么问题? 是否仍有保存XAML控件并手动还原它的方法


我不知道哪些属性是我无法解析或序列化的,但如果有这些属性的列表,那对我来说就好了。

答案非常简单。XAML
画笔
不可序列化

答案非常简单。XAML
画笔
不可序列化

是可序列化的。就把它当作财产吧。然后使用

var newBrush = new SolidColorBrush(newColor);
希望这有帮助

是可序列化的。就把它当作财产吧。然后使用

var newBrush = new SolidColorBrush(newColor);

希望这有帮助

一种猜测是
Brush
Dispatcher
属性导致了/a问题。它肯定不是要序列化的。将其中一个答案标记为答案可能有意义。一个猜测是
笔刷的
Dispatcher
属性导致了/a问题。它肯定不是要连载的。也许可以把其中一个答案标记为答案。谢谢Jerry,你知道我想要什么吗?不管序列化如何。好吧,假设笔刷是一个不透明度为100%的SolidColorBrush,您可以从中提取颜色,并仅使用该颜色进行序列化。这就是说,画笔也可以是线性画笔或网纹画笔,不透明度不同,这使得提取和再水化非常复杂。谢谢Jerry,你知道我想要什么方法吗?不管序列化如何。好吧,假设笔刷是一个不透明度为100%的SolidColorBrush,您可以从中提取颜色,并仅使用该颜色进行序列化。也就是说,画笔也可以是线性画笔或不透明度不同的网纹画笔,这使得提取和再水化非常复杂。谢谢你的回答,UI.Color是,但画笔不是,这是我的情况:)谢谢你的回答,UI.Color是,但画笔不是,这是我的情况:)