【发布时间】:2016-03-08 07:46:31
【问题描述】:
我正在尝试通过保存整个控件来保存 XAML UIElement(网格、按钮、TextBlock..等)的属性并再次恢复它。 所以我的第一个选择是 JSONize -serialize- 控件并将其保存为字符串,然后通过 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; }
}
没有复杂的类型和属性。但同样的异常再次发生。
然后我尝试将 Brush 类型更改为 string 并仅使用“Red”进行测试,然后我尝试对其进行序列化并且它正在工作!!
画笔类型有什么问题? 无论如何要保存 XAML 控件并在没有手动序列化的情况下恢复它?
我不知道我无法解析或序列化的确切属性是什么,但如果有这些属性的列表,那对我有好处..
【问题讨论】:
-
一种猜测是
Brush的Dispatcher属性导致了/a 问题。它绝对不打算被序列化。 -
将答案之一标记为答案可能有意义。
标签: windows-runtime windows-store-apps winrt-xaml win-universal-app