1

由于某些原因,我需要控制 .NET 中的对象序列化过程。我必须控制属性应该被序列化。这个过程应该是动态的,因此,一个请求应该序列化一组属性,而另一个请求应该序列化。我很好奇是否可以通过已经存在的机制来实现,或者我必须设计一些自定义序列化程序?

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 回答