基本上我遇到了问题,我不知道下一步该做什么。也许我只是让我的解决方案太复杂了,还有一个更简单,或者我只是没有看到答案。我正在开发一个系统,其中每个对象都有自己的原型父级。 Prototype对象具有对象所需的所有信息。在序列化期间,我只存储与原型对象中的相同属性不同的属性。我这样做会减少序列化对象文件的大小。这似乎很好,但它创造了一个新问题。
这是一个例子:假设我有一个敌人角色对象。它具有名称,健康状况,库存值等。在游戏保存过程中,我将其全部序列化,不包括未更改的值,并且与原型对象中的值相同。这部分很容易,但我不明白的是如何解决我的反序列化过程。
当我加载游戏时,我想从我的保存文件中反序列化对象,然后 - 如果存在原型对象,我想用原型对象数据填充反序列化的对象。我在这种情况下看到的问题是,如果角色的库存包含与其原型不同的项目 - 它仍将从原始蓝图对象接收这些项目。
如果我想跳过某些值,我该如何自动执行这样的情况呢?例如,如果健康值已经存在 - 我不希望原型中的原始值。或者如果库存中已有物品 - 我不想从蓝图对象接收物品。
答案 0 :(得分:1)
您可以这样做:
JObject o1 = JObject.Parse(@"{
'FirstName': 'John',
'LastName': 'Smith',
'Enabled': false,
'Roles': [ 'User' ]
}");
JObject o2 = JObject.Parse(@"{
'Enabled': true,
'Roles': [ 'User', 'Admin' ]
}");
o1.Merge(o2, new JsonMergeSettings
{
// union array values together to avoid duplicates
MergeArrayHandling = MergeArrayHandling.Union
});
string json = o1.ToString();
// {
// "FirstName": "John",
// "LastName": "Smith",
// "Enabled": true,
// "Roles": [
// "User",
// "Admin"
// ]
// }