C#有没有办法动态地从序列化中排除成员?
e.g。 (我编写这段代码,而不是真实的)
class def:
[Serializable]
public class Class1
{
public int Property1{get;set;}
}
我做了
Class1 c=new Class(){Property1=15};
SerializationOption option = new SerializationOption(){ExludeList=new List(){"Property1"}};
var result=Serialize(Class1,option);
答案 0 :(得分:4)
控制它的唯一方法是在类上实现ISerializable
并在序列化期间访问某些上下文。例如:
public class Class1 : ISerializable
{
// ....
void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context)
{
var excludeList = (List<String>)context.Context;
if(!excludeList.Contains("Property1"))
{
info.AddValue("Property1",Property1);
}
}
}
您在创建格式化程序时提供此上下文。例如:
var sc = new StreamingContext(StreamingContextStates.All,
new List<String> { "Property1" });
var formatter = new BinaryFormatter(null, sc);