代码之家  ›  专栏  ›  技术社区  ›  Muhamed AlGhzawi

WinRT:有什么方法可以(Json,XML)在C#中序列化XAMLUIElement?

  •  0
  • Muhamed AlGhzawi  · 技术社区  · 9 年前

    我正在尝试保存XAMLUIElement的属性(Grid、Button、TextBlock等),并通过保存整个控件再次恢复它。。 所以我的第一个选择是将控件JSONize-serialize并保存为字符串,然后通过Newtonsoft中的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控件并在不手动序列化的情况下将其还原?

    我不知道我无法解析或序列化的具体属性是什么,但如果有这些属性的列表,那对我来说会很好。。

    2 回复  |  直到 9 年前
        1
  •  2
  •   Jerry Nixon    9 年前

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

        2
  •  1
  •   Arctic Vowel    9 年前

    这个 Windows.UI.Color 可序列化。把它作为财产。然后使用

    var newBrush = new SolidColorBrush(newColor);
    

    希望这有帮助!