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