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 に答える