C#有没有办法动态地从序列化中排除成员?

时间:2013-02-28 23:26:16

标签: c# serialization dynamic

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);

1 个答案:

答案 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);