日期:2014-05-19  浏览次数:20988 次

当父类无法标记为可序列化的时候,子类如何进行二进制序列化
如题,原本是用XML序列化的。但是进行压力测试的时候发觉速度实在不行,不得已改用二进制序列化。但是由于实体类的父类使用的是第三方的ORM对象,所以无法把它标记为[Serializable]。那么在这种情况下,子类进行二进制序列化的话就会报错。请问有没有高手能够在不修改父类的情况下,让子类二进制序列化?谢谢!!

在JAVA下似乎可以让子类来实现父类字段的序列化来达到目的,不知道.NET下面要怎么做。

------解决方案--------------------
将子类标上[Serializable],实现ISerializable接口,也就是添加构造函数
protected ClassName(SerializationInfo info,StreamContext context)和public virtual void GetObjectData(SerializationInfo info,StreamContext context)方法
例:
[Serializable]
public class MyObject : ISerializable
{
public int n1;
public int n2;
public String str;

public MyObject()
{
}

protected MyObject(SerializationInfo info, StreamingContext context)
{
n1 = info.GetInt32( "i ");
n2 = info.GetInt32( "j ");
str = info.GetString( "k ");
}

public virtual void GetObjectData(SerializationInfo info,
StreamingContext context)
{
info.AddValue( "i ", n1);
info.AddValue( "j ", n2);
info.AddValue( "k ", str);
}
}