* AVObjectController.cs: chore: 修复保存嵌套 AVObject 的错误

* AVObject.cs:
oneRain 2019-09-19 11:28:47 +08:00
parent 6c62ed2707
commit afebf78444
2 changed files with 7 additions and 11 deletions

View File

@ -3,7 +3,6 @@ using System.Linq;
using System.Collections.Generic; using System.Collections.Generic;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using LeanCloud.Utilities;
using System.Net.Http; using System.Net.Http;
namespace LeanCloud.Storage.Internal { namespace LeanCloud.Storage.Internal {

View File

@ -455,12 +455,9 @@ string propertyName
itemsToVisit = dict.Values; itemsToVisit = dict.Values;
} else if (root is IList list) { } else if (root is IList list) {
itemsToVisit = list; itemsToVisit = list;
} else if (traverseAVObjects) { } else if (traverseAVObjects && root is AVObject obj) {
var obj = root as AVObject;
if (obj != null) {
itemsToVisit = obj.Keys.ToList().Select(k => obj[k]); itemsToVisit = obj.Keys.ToList().Select(k => obj[k]);
} }
}
if (itemsToVisit != null) { if (itemsToVisit != null) {
foreach (var i in itemsToVisit) { foreach (var i in itemsToVisit) {
if (!seen.Contains(i)) { if (!seen.Contains(i)) {
@ -591,11 +588,11 @@ string propertyName
var uniqueObjects = new HashSet<AVObject>(objects, new IdentityEqualityComparer<AVObject>()); var uniqueObjects = new HashSet<AVObject>(objects, new IdentityEqualityComparer<AVObject>());
// 先保存文件对象(后面可以考虑将 AVFile 作为 AVObject 的子类型进行保存) // 先保存文件对象(后面可以考虑将 AVFile 作为 AVObject 的子类型进行保存)
var saveDirtyFileTasks = DeepTraversal(obj, true) //var saveDirtyFileTasks = DeepTraversal(obj, true)
.OfType<AVFile>() // .OfType<AVFile>()
.Where(f => f.IsDirty) // .Where(f => f.IsDirty)
.Select(f => f.SaveAsync(cancellationToken: cancellationToken)).ToList(); // .Select(f => f.SaveAsync(cancellationToken: cancellationToken)).ToList();
await Task.WhenAll(saveDirtyFileTasks); //await Task.WhenAll(saveDirtyFileTasks);
IEnumerable<AVObject> remaining = new List<AVObject>(uniqueObjects); IEnumerable<AVObject> remaining = new List<AVObject>(uniqueObjects);
while (remaining.Any()) { while (remaining.Any()) {