c# - 是否可以在 C# 中为 KeyValuePairs 的 LinkedList 创建序列化代理?
问题描述
目前正在尝试在一个统一项目中实现一个保存和加载系统,以便能够保存和重新加载游戏的状态。该项目类似于桌面纸牌游戏,其中有纸牌和纸牌。卡片堆包含 KeyValuePairs 的 LinkedList,每个节点包含一张卡片及其在堆中的方向(true = up,false = down)。这看起来像这样:
LinkedList<KeyValuePairs<Cards,bool>> cardsList
我们已经使用序列化代理正确地保存了项目中对象的位置、旋转和类型,但是其中的卡片列表没有保存。我们将如何为这种 LinkedList 创建一个序列化代理项,因为它需要保存和加载?我们已经尝试以不同的方式实现这一点,但到目前为止没有运气,任何帮助将不胜感激。
编辑:抱歉忘了提到我们为此使用二进制格式化程序而不是 XML
解决方案
感谢您的回复,我们已通过创建自定义链表序列化代理来解决此问题,该代理遍历链表并使用基于列表中位置的唯一引用将每个节点保存到文件中。从文件加载数据时,我们可以使用相同的唯一引用以正确的顺序检索正确的节点。下面是展示我们如何做到这一点的代码片段(我们意识到这可能不是最有效的方式,但它可以满足我们的需求):
将数据保存到文件:
`int num = 0;
info.AddValue("count", cardsList.Count);
foreach (KeyValuePair<Cards,bool> el in cardsList){
info.AddValue(num + "id", el.Key.ID);
info.AddValue(num + "faceUp", el.Value);
num++;
}`
从文件加载数据:
`int count = (int)info.GetValue("count", typeof(int));
string id = "";
bool faceUp;
for (int i = 0; i < count; i++)
{
id = (string)info.GetValue(i + "id", typeof(string));
faceUp = (bool)info.GetValue(i + "faceUp", typeof(bool));
linkedList.AddLast(new KeyValuePair<Cards,bool>(gameController.FindCard(id), faceUp));
}`
推荐阅读
- php - 1040 php Pdo 异常中的连接过多
- c# - httpclient c# couchdb 未经授权创建数据库
- javascript - 在 Visual Studio 2017 中处理 JavaScript 文件需要很长时间
- three.js - Internet Explorer 11 打不开本地three.js,连本地服务器也打不开
- c# - Xam.Plugin.Connectivity (by James Montemagno) 无视提供的超时
- intellij-idea - 来自 ValidationMessages.properties 的约束消息的语言注入
- machine-learning - 平衡划分具有 n 个加权特征的数据集
- sql-server - 关键字“Set”附近的语法不正确与 asp/sql 代码冲突
- python - Pylogit Scikit-Learn 包装器
- amazon-web-services - Cloud Formation 支持基于速率的 WAF 规则