Container 的 ReadItemAsync 无法正确解析 Stack<T> 实例

ReadItemAsync of Container cannot parse Stack<T> instance correctly

众所周知,Stack 实例代表后进先出 (LIFO) 集合。

Stack<ChangeItem> ChangeItems = new Stack<ChangeItem>();
ChangeItems.Push(changeItem);

序列化到Cosmos DB后,最后入项在位置0。序列正确。

但问题是从数据库检索实例时。

response = await container.ReadItemAsync<T>(id, partitionKey);

顺序颠倒了。它成为先进先出的顺序。 然后添加新项,并保存回来,最后一项在第一个位置。最后顺序乱了。

例如,

第一次保存Stack实例,顺序为[1, 2]

再取回实例,序列变为[2, 1],添加新项,序列为[3, 1, 2]

再取回instance,序列变为[2, 1, 3],添加新item,序列为[4, 2, 1, 3]

...

有什么设置可以避免这个问题吗? 谢谢

如果我知道您想要的顺序是按 属性 值排序,例如 OccurredOn,我建议使用 SortedSet 而不是 Stack。假设您的模型 class 被正确定义用于比较,您的应用程序将在内存中自动对它们进行排序,并且应该一致地保留。

Stack 存在一个限制,当您序列化和反序列化 Stack 时,顺序会向后更改。我建议使用更多的平面列表 List,它以相同的顺序很好地序列化和反序列化。此外,您可以使用 LINQ 按日期排序。