由于某些原因,我需要控制.NET中对象序列化的过程。我必须控制属性应该序列化。这个过程应该是动态的,因此,在一个请求中,应该序列化一组属性,而另一个属性应该序列化。我很好奇是可以通过已有的机制实现还是我必须设计一些自定义序列化器?
答案 0 :(得分: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()));
}
}