Para serializar um objeto que contém referências circulares para mongo, você precisa configurá-lo para ignorar a referência e inicializá-lo durante a desserialização:
[Test]
public void CanSerializeCircularReferences()
{
var parent = new Parent();
parent.Name = "Parent 1";
parent.AddChild(new Child() { Name = "Child 1" });
parent.AddChild(new Child() { Name = "Child 2" });
var repository = new MongoRepository<Parent>("mongodb://localhost/tests");
repository.Add(parent);
var parent2 = repository.GetSingle(p => p.Name == "Parent 1");
Assert.That(parent2, Is.Not.Null);
Assert.That(parent2.Children[0].Father,Is.EqualTo(parent2));
}
public class Parent : Entity, ISupportInitialize
{
private List<Child> children = new List<Child>();
public string Name { get; set; }
public List<Child> Children
{
get { return children; }
set { children = value; }
}
public void AddChild(Child toAdd)
{
Children.Add(toAdd);
toAdd.Father = this;
}
public void BeginInit()
{
return;
}
public void EndInit()
{
this.Children.ForEach(child => child.Father=this);
}
}
public class Child
{
public string Name { get; set; }
[BsonIgnore]
public Parent Father { get; set; }
}