public override string Manifest(object o)
{
if (o is EntityState) return EntityStateManifest;
if (o is EntityStarted) return EntityStartedManifest;
if (o is EntityStopped) return EntityStoppedManifest;
if (o is PersistentShardCoordinator.State) return CoordinatorStateManifest;
if (o is PersistentShardCoordinator.ShardRegionRegistered) return ShardRegionRegisteredManifest;
if (o is PersistentShardCoordinator.ShardRegionProxyRegistered) return ShardRegionProxyRegisteredManifest;
if (o is PersistentShardCoordinator.ShardRegionTerminated) return ShardRegionTerminatedManifest;
if (o is PersistentShardCoordinator.ShardRegionProxyTerminated) return ShardRegionProxyTerminatedManifest;
if (o is ShardHomeAllocated) return ShardHomeAllocatedManifest;
if (o is PersistentShardCoordinator.ShardHomeDeallocated) return ShardHomeDeallocatedManifest;
if (o is PersistentShardCoordinator.Register) return RegisterManifest;
if (o is PersistentShardCoordinator.RegisterProxy) return RegisterProxyManifest;
if (o is PersistentShardCoordinator.RegisterAck) return RegisterAckManifest;
if (o is PersistentShardCoordinator.GetShardHome) return GetShardHomeManifest;
if (o is ShardHome) return ShardHomeManifest;
if (o is PersistentShardCoordinator.HostShard) return HostShardManifest;
if (o is PersistentShardCoordinator.ShardStarted) return ShardStartedManifest;
if (o is PersistentShardCoordinator.BeginHandOff) return BeginHandOffManifest;
if (o is PersistentShardCoordinator.BeginHandOffAck) return BeginHandOffAckManifest;
if (o is PersistentShardCoordinator.HandOff) return HandOffManifest;
if (o is PersistentShardCoordinator.ShardStopped) return ShardStoppedManifest;
if (o is PersistentShardCoordinator.GracefulShutdownRequest) return GracefulShutdownReqManifest;
if (o is Shard.GetShardStats) return GetShardStatsManifest;
if (o is Shard.ShardStats) return ShardStatsManifest;
throw new ArgumentException(string.Format("Can't serialize object of type [{0}] in [{1}]", o.GetType(), this.GetType()));
}