C#有没有一种方法可以动态地从序列化中排除成员?

例如(我编写此代码,不是真实的)

类定义:

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

最佳答案

唯一的控制方法是在类上实现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);

关于c# - C#有没有一种方法可以动态地从序列化中排除成员?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15147664/

10-10 16:02