问题标签 [xaml-serialization]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
700 浏览

c# - Xaml 序列化和不可变结构?

我怎样才能做到这一点?

尝试使用 TypeConverter,但我唯一能想到的就是为类型构造 XML,这并没有完全削减它。xaml 序列化中的 TypeConverters 将转义 xml 并将其视为纯文本。价值转换器也好不到哪里去。

现在,我正在转向 ISupportInitialize,如果在初始化后进行更改,我会抛出,但我会喜欢不可变的路线......


我希望序列化的类型示例:

和代码

0 投票
1 回答
780 浏览

xaml - WPF中的TextDecorationCollection序列化

我可以为实际上是一个集合(TextDecorationCollection)的依赖属性指定任何 xaml 序列化属性吗?

我想使用序列化来克隆一个非常大而复杂的对象。这里是简化的代码示例:

有一个 MyVisualObject,它包含很多属性,包括我想克隆的自定义字体

自定义字体定义如下:

深度克隆方法:

问题是每次我将装饰初始化为下划线

克隆过程因以下错误而崩溃:'向'System.Windows.TextDecorationCollection'类型的集合添加值引发异常。' 行号“1”和行位置“213”。

据我所知,序列化,也就是这部分

返回一个没有将装饰设置为集合的 xaml:

但是如果 xaml 是这样的,克隆过程将起作用:

我找到了一种解决方法,使用字符串替换:

但我认为它真的很脏,如果你能提供一个更干净的解决方案,我会很感激(例如,为 Decorations 属性指定一个属性)

0 投票
2 回答
1136 浏览

c# - XAMLWriter 对 DataGrid 列失败

我正在使用 XAMLWriter 序列化一些控件。它适用于其他控件,但不适用于 DataGrid。首先,它不能序列化 DataGrid 列,这很烦人(如果有人有解决方案,太好了!),所以我设法找到解决方法。这段代码:

产生这个输出:<DataGrid />

根本没有列!所以,我发现我可以将列添加为项目:

我得到了这个输出,这对我来说已经足够了:

比我可以手动添加<DataGrid.Columns></DataGrid.Columns>

谁能解释我为什么 XAMLWriter 会这样,有没有办法成功序列化 DataGrid 列?

0 投票
1 回答
2314 浏览

xaml - 忽略 XamlWriter.Save 中的不可序列化对象

我有一堆需要转储到 xaml 的 WPF 控件。某些控件包含存储在其 Tag 属性中的不可序列化对象。我需要在保存 Xaml 期间忽略它们,因为我需要布局本身,但 XamlWriter.Save 会生成一个错误,指出它们不可序列化。

0 投票
1 回答
588 浏览

c# - WF4 的序列化问题

我的工作流服务中的变量有一个特殊问题。它是来自 REST 服务的数据合约数组,ContactContract[]. 当这个数组为空时,一切都很好,工作流程继续正确。但是,如果数组中有任何项目在我的活动之外发生堆栈溢出,不幸的是我无法确定具体位置。

因此,之前DataContractSerializer在对象图中存在循环时看到过类似的情况,我编写了一个单元测试来尝试它。测试失败,但出现以下异常:

System.Xaml.XamlObjectReaderException:无法序列化类型“System.Runtime.Serialization.ExtensionDataObject”。验证该类型是公共的并且具有默认构造函数或实例描述符。

和测试:

(我会为联系人列表添加 xml,但它很大)

我认为这是因为合同实施IExtensibleDataObject以更好地支持版本控制。

这不是我预期的堆栈溢出,但我敢打赌它是相关的。

有没有人遇到过这些问题或有什么建议?

0 投票
2 回答
861 浏览

c# - 二进制字符串属性的 XAML 序列化

如hereherehere所述,我将XamlServices其用作通用序列化机制。尽管这在大多数情况下都非常有效,但我不清楚如何让它序列化包含不可打印字符(特别是空字符)的字符串属性值。

这是一个我可能希望序列化的类的简单示例:

如果我创建该类的实例(注意分配的属性值中的空字符)......

...并使用XamlServices...对其进行序列化

...它抛出异常hexadecimal value 0x00, is an invalid character.

我猜这表明 XAML 序列化本身不支持二进制字符串数据,所以我很乐意在序列化期间将字符串转换为编码形式(例如 Base64)。

我试图通过创建一个实现 Base64 编码的自定义 XAML 值序列化程序并将其应用于相关的类属性来实现这种转换......

...但它的转换方法永远不会被调用,大概是因为 XAML 序列化机制认为在序列化字符串属性时不需要自定义序列化程序。

同样,我创建了一个具有相同目标的自定义类型转换器。再一次,它的ConvertTo方法在序列化过程中不会被调用,但有趣的是,它的ConvertFrom方法在反序列化过程中会被调用,并从 Base64 编码的字符串数据中正确填充目标属性。

我正在寻找如何XamlServices遵循我的自定义TypeConverterValueSerializer其他方式将我的二进制字符串属性值强制转换为字符串可序列化形式的想法。