c# - ShouldSerialize... 机制似乎不再起作用
问题描述
我有这段代码:
[XmlIgnore]
public static Configuration Config;
[XmlElement("Configuration")]
public Configuration Configuration // property in myViewModel
{
get { return Config; }
set { Config = value; }
}
bool serializeConfig = true;
bool ShouldSerializeConfiguration()
{
return serializeConfig;
}
public void ResetConfiguration()
{
serializeConfig = true;
}
以及我使用它的功能:
private void SaveToClipboard()
{
serializeConfig = false; // toggle no serialization
try
{
XmlSerializer serializer = new XmlSerializer(typeof(myViewModel)); // object that the Configuration is in
using (StringWriter stream = new StringWriter())
{
serializer.Serialize(stream, this);
Clipboard.SetText(stream.ToString());
}
serializeConfig = true; // toggle back
}
catch (InvalidOperationException e)
{
// etc.
}
}
我使用 serializeConfig 来切换 Configuration 对象的序列化。我在两个地方序列化,其中一个不需要配置。但它并不像宣传的那样工作。
使用 [XmlIgnore] 它应该跳过配置。
SaveToClipboard 是 myViewModel 的一个方法,它是序列化的。
是不再支持此设施还是什么?我在win10Pro上使用VS2017最新更新。
解决方案
与 一起使用时XmlSerializer
,方法需要是public
,即
public bool ShouldSerializeConfiguration()
{
return serializeConfig;
}
对于其他一些场景,情况并非如此,但XmlSerializer
本质上是作为独立编译的程序集工作,因此适用完整的可见性规则。
推荐阅读
- mapbox-gl-js - MapboxGL - 如何在标记之间创建路线作为曲线?
- android - 垂直进度条不能分配到布局的末尾
- google-chrome-devtools - 如何在任何其他选项卡旁边打开 Google DevTools 中的“控制台”选项卡,以便我可以同时查看它们的内容?
- altair - Vega-Lite/Altair 添加标签以选择下拉菜单
- makefile - 仅当特定子目录使用 GNU Make 更改时才编译文件
- css - 用于表格行和单元格时,CSS 特异性不适用
- css - Flex/Nowrap 不能在引导程序中使用第一列和文本截断
- fullcalendar - 带有 AllDay 的事件上的 Fullcalendar SetDate 不起作用
- git - Git 命令行相当于 Sourcetree 在两个任意提交之间的反向大块
- python - 匹配外汇交易的组合