namespace Server.Engines.Reports { public abstract class PersistableObject { public abstract PersistableType TypeID{ get; } public virtual void SerializeAttributes(PersistanceWriter op) { } public virtual void SerializeChildren(PersistanceWriter op) { } public void Serialize(PersistanceWriter op) { op.BeginObject(TypeID); SerializeAttributes(op); op.BeginChildren(); SerializeChildren(op); op.FinishChildren(); op.FinishObject(); } public virtual void DeserializeAttributes(PersistanceReader ip) { } public virtual void DeserializeChildren(PersistanceReader ip) { } public void Deserialize(PersistanceReader ip) { DeserializeAttributes(ip); if (ip.BeginChildren()) { DeserializeChildren(ip); ip.FinishChildren(); } } } }