影响 BinaryFormatter 反序列化的枚举序数?
Ordinal of enum affecting BinaryFormatter deserialization?
我在游戏中遇到分数序列化的奇怪问题。
我有一个 LevelHighScore class:
[System.Serializable]
public class LevelHighScores
{
readonly Dictionary<Level, ModeScores> scores;
// clipped out the rest for simplicity
}
使用枚举键,Level
。
我最近在游戏中添加了一些新关卡,但我没有将新关卡添加到枚举的末尾,而是按字母顺序添加了新枚举。现在,当我加载游戏时,我的新关卡有与之关联的现有分数,这让我认为枚举的序数对序列化/反序列化有影响。
我想避免在以后添加关卡时避免这个问题。我也不想记住只将级别添加到枚举的末尾。
有没有办法确保枚举被一致地反序列化,即使在追溯添加新值时也是如此?
将 [DataContract]
属性添加到枚举并使用 DataContractSerializer
进行序列化。在单个值上放置 [EnumMember]
属性。
这将导致值按名称而不是数值序列化。
为了确保我会测试序列化到一个文件(或者一个字符串,如果它是 XML 序列化)并查看它存储的内容以确保它有效,并确保它尚未序列化名字。否则你无法确定是不是这个原因。
我最终遵循 并向枚举添加显式值。
所以,我改变了级别,
public enum Level
{
Aquarium,
Crescendo,
HungarianDance,
MapleLeafRag,
}
到
// NOTE: the numbers here don't represent order,
// they are just to ensure proper serialization
public enum Level
{
AmazingPlan = 4, // new level
Aquarium = 0,
Crescendo = 1,
HungarianDance = 2,
MapleLeafRag = 3,
}
这是解决我的问题的一个很好的简单解决方案,但我认为对于非 Unity 项目 可能是可行的方法。
我在游戏中遇到分数序列化的奇怪问题。
我有一个 LevelHighScore class:
[System.Serializable]
public class LevelHighScores
{
readonly Dictionary<Level, ModeScores> scores;
// clipped out the rest for simplicity
}
使用枚举键,Level
。
我最近在游戏中添加了一些新关卡,但我没有将新关卡添加到枚举的末尾,而是按字母顺序添加了新枚举。现在,当我加载游戏时,我的新关卡有与之关联的现有分数,这让我认为枚举的序数对序列化/反序列化有影响。
我想避免在以后添加关卡时避免这个问题。我也不想记住只将级别添加到枚举的末尾。
有没有办法确保枚举被一致地反序列化,即使在追溯添加新值时也是如此?
将 [DataContract]
属性添加到枚举并使用 DataContractSerializer
进行序列化。在单个值上放置 [EnumMember]
属性。
这将导致值按名称而不是数值序列化。
为了确保我会测试序列化到一个文件(或者一个字符串,如果它是 XML 序列化)并查看它存储的内容以确保它有效,并确保它尚未序列化名字。否则你无法确定是不是这个原因。
我最终遵循
所以,我改变了级别,
public enum Level
{
Aquarium,
Crescendo,
HungarianDance,
MapleLeafRag,
}
到
// NOTE: the numbers here don't represent order,
// they are just to ensure proper serialization
public enum Level
{
AmazingPlan = 4, // new level
Aquarium = 0,
Crescendo = 1,
HungarianDance = 2,
MapleLeafRag = 3,
}
这是解决我的问题的一个很好的简单解决方案,但我认为对于非 Unity 项目