Hmmm, sounds interesting. If I serialize monsters seperately, I doubt their pointers would still work though, so any system where only part of the game gets saved during play (visited dungeon levels) wouldn't work that well.
Unless I shove all entities in a waiting list, assign each a numeric ID and save their pointers as the ID of the thing they're pointing to, then reinstate those pointers upon load... I'm missing something here.
when you leave a dungeon level, the monsters should forget who their chasing, unless you want to come back later and still have the cat chasing the mouse around the pillar.
Defining your own serialization should allow you to set all the pointers to 0, or even a 'prepare for sync' function.
Honestly, I wouldn't serialize the monsters seperately at all, just one big 'serializemap' function that hits everything it owns (which should be everything but the character). In that case, all the pointers WILL come back (binary serialization is fun that way). All you have to do is handle the case where the monster is pointing at something that doesn't belong to the level (like the PC or his allies).
I'm not sure I would let the characters on the map store a pointer to the actual character, though. It seems more 'correct' for the map to point to a handler and the monster to know how to get what it needs through that. (something to think about.)
In my case, it was just a case of marking all my classes as ISerializable. .net has made me lazy