我试过这样的事情:
[NonSerialized]
private string _DecodeText;
public string DecodeText { get { return _DecodeText; } set { _DecodeText = value; } }
但它不起作用。 “DecodeText”仍在序列化文件中。如何防止属性序列化?
答案 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)