Serialization/Deserialization 带有原型对象
Serialization/Deserialization with prototype objects
基本上我遇到了问题,我不确定下一步该怎么做。也许我只是让我的解决方案太复杂了,还有一个更简单的解决方案,或者我只是看不到答案。我正在开发一个系统,其中每个对象都有自己的原型父对象。原型对象具有对象所需的所有信息。在序列化过程中,我只存储与原型对象中相同 属性 不同的属性。我这样做确实减少了序列化对象文件的大小。这看起来不错,但它产生了一个新问题。
举个例子:假设我有一个敌人角色对象。它有名称、生命值、库存值等。在游戏保存过程中,我将所有这些都序列化,不包括没有改变并且与原型对象中的值相同的值。那部分很简单,但我不明白的是如何解决我的反序列化过程。
当我重新加载我的游戏时,我想从我的保存文件中反序列化对象,然后 - 如果原型对象存在,我想用原型对象数据填充反序列化的对象。我在这种情况下看到的问题是,如果角色的库存包含与其原型不同的项目 - 它仍然会从原始蓝图对象接收这些项目。
如果我想跳过一些已经存在的值,我该如何自动化这种情况?例如,如果健康值已经存在——我不想要来自原型的原始值。或者如果库存中已经有物品 - 我不想从蓝图对象接收物品。
你可以这样做:
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"
// ]
// }
基本上我遇到了问题,我不确定下一步该怎么做。也许我只是让我的解决方案太复杂了,还有一个更简单的解决方案,或者我只是看不到答案。我正在开发一个系统,其中每个对象都有自己的原型父对象。原型对象具有对象所需的所有信息。在序列化过程中,我只存储与原型对象中相同 属性 不同的属性。我这样做确实减少了序列化对象文件的大小。这看起来不错,但它产生了一个新问题。
举个例子:假设我有一个敌人角色对象。它有名称、生命值、库存值等。在游戏保存过程中,我将所有这些都序列化,不包括没有改变并且与原型对象中的值相同的值。那部分很简单,但我不明白的是如何解决我的反序列化过程。
当我重新加载我的游戏时,我想从我的保存文件中反序列化对象,然后 - 如果原型对象存在,我想用原型对象数据填充反序列化的对象。我在这种情况下看到的问题是,如果角色的库存包含与其原型不同的项目 - 它仍然会从原始蓝图对象接收这些项目。
如果我想跳过一些已经存在的值,我该如何自动化这种情况?例如,如果健康值已经存在——我不想要来自原型的原始值。或者如果库存中已经有物品 - 我不想从蓝图对象接收物品。
你可以这样做:
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"
// ]
// }