gpt4 book ai didi

c# - MongoDb 更新错误 : Maximum serialization depth exceeded

转载 作者:太空宇宙 更新时间:2023-11-03 15:21:37 24 4
gpt4 key购买 nike

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

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

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

这里是对象模型类。错误是由于我的模型类中的以下行引起的吗?

公共(public)列表 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; }



}
}

这是我尝试执行更新的 Controller 操作方法

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 });
}

最佳答案

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

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

您应该存储这些数据库记录的 ID。

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

关于c# - MongoDb 更新错误 : Maximum serialization depth exceeded,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37127303/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com