防止属性被序列化
本文关键字:序列化 属性 | 更新日期: 2023-09-27 18:16:49
我试了这样做:
[NonSerialized]
private string _DecodeText;
public string DecodeText { get { return _DecodeText; } set { _DecodeText = value; } }
但是它不起作用。"DecodeText"仍在序列化文件中。如何防止属性序列化?
我怀疑你正在使用XmlSerializer
?如果是,请使用[XmlIgnore]
属性。
当XmlSerializer
序列化公共字段和属性时,这应该应用于属性而不是支持字段(而BinaryFormatter使用反射来获取私有字段-因此在使用BinaryFormatter时使用NonSerialized标记私有字段)。
我可以使用下面的代码而不用序列化属性(NET 4.0):
private string _DecodeText;
[System.Xml.Serialization.XmlIgnore]
public string DecodeText { get { return _DecodeText; } set { _DecodeText = value; } }
更新答案
[NonSerialized]属性在变量上而不是属性上,但它不能在属性上。所以这没有用。
防止属性被序列化的一种方法是添加一个方法public bool ShouldSerializeDecodeText() {
return false;
}
,这(至少对于XmlSerializer)将阻止属性被序列化。
如果您不想仅仅为了序列化而向类中添加大量方法,您可以尝试从它继承并将方法添加到派生类中。
hth,艾伦。
我建立在@John的答案之上并修改了ef。tt模板包含[System.Xml.Serialization.XmlIgnore]
代码
foreach (var navigationProperty in navigationProperties)
{
if (navigationProperty.ToEndMember.RelationshipMultiplicity == RelationshipMultiplicity.Many)
{
#>
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
[System.Xml.Serialization.XmlIgnore]
<#
}
#>
<#=codeStringGenerator.NavigationProperty(navigationProperty)#>
<#
}
我想这段代码会对大家有所帮助。使用您声明的属性,并且您希望它仅被序列化。然后你应该添加一个方法返回类型为布尔和名称方法是ShouldSerialize作为前缀[NameProperty]。下面的草稿代码和Newtonsoft的链接参考:
public class DisplayFieldSetting
{
public bool ShouldSerializeHidden()
{
return false;
}
public bool ShouldSerializeKeepOriginialColumnName()
{
return false;
}
public string Hidden { get; set; }
public string KeepOriginialColumnName{ get; set; }
}