Ana*_*nax 19
我相信这里有三个选择:
使用XmlIgnore属性.缺点是您需要事先知道xmlserializer要忽略哪些属性.
实现IXmlSerializable接口.这使您可以完全控制XML的输出,但您需要自己实现读/写方法.
实现ICustomTypeDescriptor接口.我相信无论您选择何种类型的序列化,这都将使您的解决方案工作,但它可能是最长的解决方案.
Ser*_*kov 17
这取决于序列化类型.这里使用BinaryFormatter执行此操作的完整示例:
您可以使用OnDeserializedAttribute:
[Serializable]
class SerializableEntity
{
[OnDeserialized]
private void OnDeserialized()
{
id = RetrieveId();
}
private int RetrievId() {}
[NonSerialized]
private int id;
}
Run Code Online (Sandbox Code Playgroud)
还有另一种方法可以使用IDeserializationCallback来做到这一点:
[Serializable]
class SerializableEntity: IDeserializationCallback
{
void IDeserializationCallback.OnDeserialization(Object sender)
{
id = RetrieveId();
}
private int RetrievId() {}
[NonSerialized]
private int id;
}
Run Code Online (Sandbox Code Playgroud)
您也可以阅读Jeffrey Richter关于序列化的文章:第1 部分和第2部分.
如果要序列化为XML,则可以使用XMLIgnore
如:
class SomeClass
{
[XmlIgnore] int someID;
public string someString;
}
Run Code Online (Sandbox Code Playgroud)
小智 5
一个旧帖子,但我发现了 ShouldSerialize 模式 http://msdn.microsoft.com/en-us/library/53b8022e%28VS.71%29.aspx这真的很有帮助!!!