我最近在学习C#序列化。我注意到[NonSerializable]
属性,并想知道为什么它应该/可以/必须使用以及原因是什么。
以下是我使用过的一些研究网站:
MSDN article about the NonSerializable attribute(包含一个例子,但没有理由说明它应该/不应该被使用)
是否存在严重无法序列化(理论和实践)的例子?
为什么要使用它?
答案 0 :(得分:2)
我可以想到为什么不序列化某些字段的几个原因,例如:
答案 1 :(得分:2)
如果我利用属性来阻止序列化,那通常是因为我想要保护数据,或者因为序列化给定字段(可能是一个本身不可序列化的字段,或者每个都被初始化的字段)都没有意义该类被实例化的时间。)
例如,假设我有一个我想保存的与用户关联的记录。我可能想保存他们的名字,但从不保存他们的密码:
[Serializable]
public struct User
{
public string Name;
//this should never be persisted
[NonSerialized]
public string Password;
}
//when I persist this, it persists the CreatedBy User without the password
[Serializable]
public class Record
{
//password won't be persisted now
public User CreatedBy{ get; set; }
//other information I want to save
}
其他时候,我可能有一个不可序列化的属性,我不想保存或在序列化后通过线路发送。
[Serializable]
public class Whatever
{
public Whatever()
{
//this always gets new-ed up, so there's no point in persisting it.
//maybe it's not even serializable!
HelperUtility = InitHelper();
}
//no sense in serializing this helper utility
[NonSerialized]
public NonSerializableClass HelperUtility;
//but I may want to actually save this!
public string DataIActuallyWantToSave;
}
这就是要点。
这些属性实际上确实在现实世界中使用,我已多次使用它们。