MongoDb更新错误:超出最大序列化深度

时间:2016-05-10 00:06:53

标签: c# mongodb serialization

我是Mongodb的新手,所以如果我的问题是基本的,请执行。我在ASP.net MVC项目中使用Mongodb C#驱动程序。但是,在执行MongoDb C#更新操作时,我遇到了此错误

超出了最大序列化深度(被序列化的对象是否具有循环引用?)。 描述:执行当前Web请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的详细信息。

异常详细信息:MongoDB.Bson.BsonSerializationException:超出最大序列化深度(被序列化的对象是否具有循环引用?)。

这是对象模型类。错误是由于下面的行,我的模型类中有哪些?

public List OutGoingFriendRequestList {get;组; }

public class UserProfileViewModel
{
    public ObjectId Id { get; set; }

    public string UserId { get; set; }

    public string Email { get; set; }

    public string DisplayName { get; set; }

    public string FirstName { get; set; }

    public string LastName { get; set; }

    public string UserDescription { get; set; }


    public string UserName { get; set; }

    public List<UserProfileViewModel> OutGoingFriendRequestList { get; set; }



  }
}

这是控制器操作方法,我尝试进行更新

public async Task<ActionResult> AddFriend(UserProfileViewModel model)
{

  //Get the database connection instance and then get the collection
  var _database = SocialNetworkHelper.ReturnMongoDbInstance();

   IMongoCollection<UserProfileViewModel> collection =  

   _database.GetCollection<UserProfileViewModel>("Facebook_Lite");

    //In the next 2 sentences, I am filtering using the userId field
    string userId = User.Identity.GetUserId();

    var filter = Builders<UserProfileViewModel>.Filter.Eq("UserId", User.Identity.GetUserId());

    var result = collection.Find(filter).ToListAsync();
    result.Wait();
    UserProfileViewModel userProfileViewModelInstance = result.Result.ElementAt(0);

    List<UserProfileViewModel> OutgoingFriendRequestList = userProfileViewModelInstance.OutGoingFriendRequestList;

    OutgoingFriendRequestList.Add(friendUserModelInstance);

    userProfileViewModelInstance.OutGoingFriendRequestList = OutgoingFriendRequestList;

    var update = Builders<UserProfileViewModel>.Update.Set("OutGoingFriendRequestList", userProfileViewModelInstance.OutGoingFriendRequestList);

    //I am hitting the exception on the below line
    **var updateResult = await collection.UpdateOneAsync(filter, update);**

        return RedirectToAction("Index", "Home", new { userid = friendUserId });
}

1 个答案:

答案 0 :(得分:0)

您表示像您这样的模型树的方式是通过保持对子/叶的引用,而不是对象本身。而不是:

public List<UserProfileViewModel> OutGoingFriendRequestList { get; set; }

你应该存储这些数据库redords的id。

public List<ObjectId> OutGoingFriendRequestList { get; set; }