我是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 });
}
答案 0 :(得分:0)
您表示像您这样的模型树的方式是通过保持对子/叶的引用,而不是对象本身。而不是:
public List<UserProfileViewModel> OutGoingFriendRequestList { get; set; }
你应该存储这些数据库redords的id。
public List<ObjectId> OutGoingFriendRequestList { get; set; }