我们知道.NET内置了序列化的过程,但是因为序列化需要通过反射等等操作,这就消耗了很大的内存,所以如果是需要提高自己的应用程序的效率,建议自己能够自定义一些序列化的过程,进而减少对.NET序列化的依赖:
class Program
{
static void Main(string[] args)
{
SerializationInfo info = new SerializationInfo(typeof(SerializableObject),new FormatterConverter());
StreamingContext context = new StreamingContext(StreamingContextStates.All);
SerializableObject serializable = new SerializableObject(info, context) { Age = 12, Name = "aaa", Description = "Good boy!" };
using (MemoryStream memory = new MemoryStream())
{
BinaryFormatter binaryFormatter = new BinaryFormatter();
binaryFormatter.Serialize(memory, serializable);
memory.Seek(0, SeekOrigin.Begin);
var new_Object = binaryFormatter.Deserialize(memory);
if (new_Object is SerializableObject)
{
SerializableObject seri = (new_Object as SerializableObject);
Console.Write(seri.Age + "--------" + seri.Name + "---------------" + seri.Description);
}
}
Console.Read();
}
}
[Serializable]
public class SerializableObject : ISerializable, IDeserializationCallback
{
public int Age { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public SerializationInfo m_info;
public StreamingContext m_context;
[SecurityPermission(SecurityAction.Demand, SerializationFormatter = true)]
public SerializableObject(SerializationInfo info, StreamingContext context)
{
m_info = info;
m_context = context;
}
[SecurityCritical]
[SecurityPermission(SecurityAction.Demand, SerializationFormatter = true)]
public void GetObjectData(SerializationInfo info, StreamingContext context)
{
info.AddValue("Age", Age);
info.AddValue("Name", Name);
}
public void OnDeserialization(object sender)
{
if (m_info != null)
{
Age = m_info.GetInt32("Age");
Name = m_info.GetString("Name");
//Description = m_info.GetString("Description");
}
}
}
个人的一些小见解,要是大家有不同见解或者本人理解错了,还请多喷喷!!