1

何らかの理由で、.NET でオブジェクトのシリアル化のプロセスを制御する必要があります。プロパティをシリアル化する必要があることを制御する必要があります。このプロセスは動的である必要があるため、1 つの要求で 1 つのプロパティ セットをシリアル化し、別の要求で別のプロパティ セットをシリアル化する必要があります。既存のメカニズムで実装することは可能ですか、それともカスタムシリアライザーを設計する必要がありますか?

4

1 に答える 1

1

ISerializableインターフェイスを使用すると、まさにそれを行うことができます。SerializationInfo基本的に、シリアル化の実行時に「プロパティ バッグ」( ) に追加する値を制御します。以下に示すように、型のプロパティに限定されていないことに注意してください。

public class StackOverflow_10639264
{
    [Serializable]
    public class MyType : ISerializable
    {
        public string SerializedAM { get; set; }
        public string SerializedPM { get; set; }
        public void GetObjectData(SerializationInfo info, StreamingContext context)
        {
            DateTime now = DateTime.Now;
            if (now.Hour < 12)
            {
                info.AddValue("MyValue", this.SerializedAM);
            }
            else
            {
                info.AddValue("MyValue", this.SerializedPM);
                info.AddValue("NotAProperty", "Hello");
            }
        }
    }
    public static void Test()
    {
        MemoryStream ms = new MemoryStream();
        DataContractSerializer dcs = new DataContractSerializer(typeof(MyType));
        dcs.WriteObject(ms, new MyType { SerializedAM = "AM", SerializedPM = "PM" });
        Console.WriteLine(Encoding.UTF8.GetString(ms.ToArray()));
    }
}
于 2012-05-17T16:06:22.527 に答える