[英]Maximum serialization depth exceeded
嘗試在MongoDB上推送新數據時出現錯誤“超出最大串行化深度”。 使用MongoDB社區在localhost上進行單元測試時,它可以正常工作。 任何幫助,將不勝感激。 我也沒有看到循環參考。
這是開始保存數據的功能。 首先到我的本地緩存,然后到雲(MongoDB)。
///Calling function
public async Task AddComment(Range item, Comment commentItem)
{
try
{
//Save to local cache
item.Comments.Add(commentItem);
//Next save to cloud
await CloudStorage.AddComment(item.User.ID, item.ID, commentItem);
}
catch (Exception ex)
{
Debug.WriteLine(ex);
}
}
//-->ERROR HAPPENS LAST LINE HERE<--
public async Task<UpdateResult> AddComment(string ownerID, string rangeID, Comment comment)
{
var filter = Builders<User>.Filter.Where(u => u.ID == ownerID &&
u.Content.Any(i => i.ID == rangeID));
var update = Builders<User>.Update.Push(c => c.Content[-1].Comments, comment);
return await collection.UpdateOneAsync(filter, update); //<- THIS THROWS ERROR
}
這是適用於localhost的單元測試。
[TestMethod]
public void TestInsertComment()
{
//Arrange
var owner = "OWNER";
var ownerData = collection.Find(u => u.Username.Equals(owner)).FirstOrDefault();
var ownerID = ownerData?.ID;
var range = ownerData?.Content.FirstOrDefault();
var newComment = new Comment
{
User = range?.User,
Content = "Some comment",
IsLive = true
};
//Act
var results = _cloudStorageService.AddComment(ownerID, range?.ID, newComment);
results.Wait();
var insertedID = collection.Find(u => u.Username.Equals(owner))
.FirstOrDefault().Content.FirstOrDefault()?
.Comments.FirstOrDefault(c => c.ID.Equals(newComment.ID))?.ID;
//Assert
Assert.AreEqual(newComment.ID, insertedID);
}
更新:我注意到的一件事是,如果同一用戶嘗試在其范圍內添加注釋,則這是唯一一次出現此錯誤的情況。 如果其他用戶添加評論,則效果很好。 而且單元測試始終可以正常工作,無論是同一用戶還是其他用戶。
哇!
因此,我決定擺脫我遇到的錯誤,而是執行代碼清理。 這樣做時,我偶然發現了我一直忽略了一個清理項目,該項目是從代碼中刪除所有SomeAsyncTask.Wait()引用,並替換為wait SomeAsyncTask。 這樣,我發現了這個小塊:
var commentItem = new Comment
{
User = GetCurrentUserExtData(),
Content = NewCommentText
}
public User GetCurrentUserExtData(string ID = null)
{
var user = new User();
var data = DataStore.GetUser(ID);
data.Wait();
user = data.Result;
return user;
}
GetCurrentUserExtData中具有SomeAsyncTask.Wait()任務。 更改為:
var commentItem = new Comment
{
Content = NewCommentText,
User = await DataStore.GetUser()
}
而且沒有更多的最大序列化深度超過錯誤! 我完全不認為這是相關的,但是確實如此! 不用說,刪除所有.WAIT()參考,並找到一種使用await的方法(如果使用異步方法)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.