使用 XamlWriter 保存数组



我正在尝试以最简单的方式保存带有XamlWriter的对象集合。出于某种原因,将它们另存为数组会产生无效的 XML:

var array = new int[] {1, 2, 3};
Console.Write(XamlWriter.Save(array));

输出:

<Int32[] xmlns="clr-namespace:System;assembly=mscorlib">
   <Int32>1</Int32>
   <Int32>2</Int32>
   <Int32>3</Int32>
</Int32[]>

尝试使用XamlReader抛出来读取此内容:

"["字符(十六进制值0x5B)不能包含在 名字。第 1 行,第 7 位置

我尝试另存为List<T>,但出现通常的 XAML 泛型错误。是否有一些简单的方法可以做到这一点(最好使用 LINQ),或者我是否必须定义自己的包装器类型?

XamlWriter.Save生成无效的XML。

<Int32[] xmlns="clr-namespace:System;assembly=mscorlib">
   <Int32>1</Int32>
   <Int32>2</Int32>
   <Int32>3</Int32>
</Int32[]>

我不知道这背后的原因,但使用XamlServices.Save似乎可以解决问题。

<x:Array Type="x:Int32" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
  <x:Int32>1</x:Int32>
  <x:Int32>2</x:Int32>
  <x:Int32>3</x:Int32>
</x:Array>

来自 MSDN 的其他说明

以下类存在于 WPF 程序集和 .NET Framework 4 中的System.Xaml程序集:

  • XamlReader
  • XamlWriter
  • XamlParseException

WPF 实现位于 System.Windows.Markup 命名空间和程序集PresentationFramework

System.Xaml实现可在System.Xaml中找到 命名空间。

如果使用 WPF 类型或从 WPF 类型派生,则应 通常使用 WPF 实现 XamlReaderXamlWriter 而不是System.Xaml实现。

有关详细信息,请参阅中的备注 System.Windows.Markup.XamlReaderSystem.Windows.Markup.XamlWriter .

使用 UIElementCollection 而不是数组怎么样? UIElementCollection很好地序列化:

var buttonArray = new Button[] { new Button(), new Button() };
var root = new FrameworkElement();
var collection = new UIElementCollection(root, root);
foreach(var button in buttonArray)
    collection.Add(button);
Console.Write(XamlWriter.Save(collection));

为您提供:

<UIElementCollection Capacity="2" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
    <Button />
    <Button />
</UIElementCollection>

相关内容

  • 没有找到相关文章

最新更新