首页 > 解决方案 > 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最新更新。

标签: c#serializationdeserialization

解决方案


与 一起使用时XmlSerializer,方法需要是public,即

public bool ShouldSerializeConfiguration()
{
    return serializeConfig;
}

对于其他一些场景,情况并非如此,但XmlSerializer本质上是作为独立编译的程序集工作,因此适用完整的可见性规则。


推荐阅读