是否可以通过编程方式设置要从序列化中排除属性?
示例:
答案 0 :(得分:18)
我相信这里有三个选择:
使用XmlIgnore属性。缺点是您需要事先知道xmlserializer要忽略哪些属性。
实施IXmlSerializable界面。这使您可以完全控制XML的输出,但您需要自己实现读/写方法。
实施ICustomTypeDescriptor界面。我相信无论您选择何种类型的序列化,这都将使您的解决方案工作,但它可能是所有类型中最长的解决方案。
答案 1 :(得分:16)
这取决于序列化类型。这是使用BinaryFormatter执行此操作的完整示例:
您可以使用OnDeserializedAttribute:
[Serializable]
class SerializableEntity
{
[OnDeserialized]
private void OnDeserialized()
{
id = RetrieveId();
}
private int RetrievId() {}
[NonSerialized]
private int id;
}
还有另一种方法可以使用IDeserializationCallback执行此操作:
[Serializable]
class SerializableEntity: IDeserializationCallback
{
void IDeserializationCallback.OnDeserialization(Object sender)
{
id = RetrieveId();
}
private int RetrievId() {}
[NonSerialized]
private int id;
}
答案 2 :(得分:5)
答案 3 :(得分:4)
如果要在序列化期间包含字段但在反序列化期间忽略它,则可以使用OnDeserializedAttribute运行一个方法,该方法将为ID字段设置默认值。
答案 4 :(得分:3)
旧帖子,但我发现了ShouldSerialize模式 http://msdn.microsoft.com/en-us/library/53b8022e%28VS.71%29.aspx这真的很有帮助!!!
答案 5 :(得分:2)
如果您正在使用XML序列化,请使用[XmlIgnore]
属性。否则,如何忽略特定属性由序列化程序本身定义。
答案 6 :(得分:1)
NonSerializedAttribute属性。
http://msdn.microsoft.com/en-us/library/system.nonserializedattribute.aspx