hop*_*pla 36 c# serialization automatic-properties
如何防止二进制格式化程序对自动实现的属性进行序列化?[NonSerialized]属性只能与字段一起使用.使用自动实现的属性时,该字段将被隐藏.
Jeh*_*hof 59
自动实现的属性不支持.您必须使用支持字段并在其上设置NonSerializedAttribute.
public class ClassWithNonSerializedProperty {
[NonSerialized]
private object _data; // Backing field of Property Data that is not serialized
public object Data{
get { return _data; }
set { _data = value; }
}
}
Run Code Online (Sandbox Code Playgroud)
// This works for the underlying delegate of the `event` add/remove mechanism.
[field:NonSerialized]
public event EventHandler SomethingHappened;
Run Code Online (Sandbox Code Playgroud)
但它似乎不适用于自动实现的属性.我认为值得一提,因为知道何时序列化附加了事件订阅者的对象是有用的.
如果您正在序列化Json并使用Json.NET序列化程序(我强烈推荐它,因为它提供了比市场上许多其他序列化程序更多的东西),那么您可以使用在属性上实现所需的结果[JsonIgnore].
您不需要创建字段.
所以你的代码是:
public class ClassName
{
[JsonIgnore]
public object IgnoreMe { get; set; }
public object DoNotIgnoreMe { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我不确定你能不能。这篇MSDN 文章SerializableAttribute建议您实现 ISerializable 并自己控制序列化:
默认情况下,由 SerializableAttribute 标记的类型中的所有公共和私有字段都会被序列化,除非该类型实现了 ISerializable 接口来覆盖序列化过程。
或者从该特定字段的自动属性切换。
自动实现的属性是不可能的。考虑以下:
此行为是设计使然”。实现自动属性时的决定是它们将在“常见情况”下工作,这意味着生成的字段上没有属性。这背后的想法是让它们保持简单,而不是慢慢地将它们变异成完整的属性。所以,如果你需要使用NonSerialized 属性的完整属性是这样的。