This post saved me quite a bit of time:
We were having a problem with serializing a domain object. It was reporting a circular reference problem. We found out that because we had overriden the Equals method to compare our ids, the XmlSerializer thought all the objects were the same if the id had not been assigned yet. Assigning an id up front solved this serialization issue.