防止属性被序列化

时间:2011-12-06 09:16:00

标签: c# wpf

我试过这样的事情:

    [NonSerialized]
    private string _DecodeText;
    public string DecodeText { get { return _DecodeText; } set { _DecodeText = value; } }

但它不起作用。 “DecodeText”仍在序列化文件中。如何防止属性序列化?

5 个答案:

答案 0 :(得分:24)

我怀疑你正在使用XmlSerializer?如果是这样,请改用[XmlIgnore]属性。

这应该应用于属性而不是支持字段,因为XmlSerializer序列化公共字段和属性(而BinaryFormatter使用refelction来获取私有字段 - 因此使用NonSerialized标记私有字段时使用BinaryFormatter)。

答案 1 :(得分:4)

我能够使用以下内容而没有序列化属性(.NET 4.0):

private string _DecodeText;
[System.Xml.Serialization.XmlIgnore]
public string DecodeText { get { return _DecodeText; } set { _DecodeText = value; } }

答案 2 :(得分:3)

更新了答案

[NonSerialized] atttibute是变量而不是属性,但它不能在属性上。所以它没有帮助。

阻止属性序列化的一种方法是添加方法

public bool ShouldSerializeDecodeText() {
   return false;
}

并且(至少对于XmlSerializer)将阻止属性被序列化。

如果您不想仅为序列化添加许多方法,可以尝试继承它并将方法添加到派生类。

HTH, 艾伦。

答案 3 :(得分:0)

我建立在@John的答案之上,并修改了ef.tt模板 包含[System.Xml.Serialization.XmlIgnore]

这是代码

"env": {"PYTHONPATH": "${workspaceRoot}"}

答案 4 :(得分:0)

我认为这段代码将对大家有所帮助。使用您声明的属性,并且只希望对其进行序列化。然后,您应该添加一个方法返回类型为布尔值,并且名称方法应为ShouldSerialize作为带有[NameProperty]的前缀。如下的暂存代码和link为您提供对Newtonsoft的引用:

from plyer import filechooser
path = filechooser.open_file(title="Pick a CSV file..", 
                             filters=[("Comma-separated Values", "*.csv")])
print(path)