2

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

1 回答 1

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);
于 2013-02-28T23:32:34.373 回答