我在游戏中的分数序列化中遇到了一个奇怪的问题。
我有一个LevelHighScore课程:
[System.Serializable]
public class LevelHighScores
{
readonly Dictionary<Level, ModeScores> scores;
// clipped out the rest for simplicity
}
使用枚举键Level
。
我最近为我的游戏添加了一些新关卡,但是我没有将新关卡添加到枚举的末尾,而是按字母顺序添加了新的枚举。现在,当我加载游戏时,我的新关卡会有与之相关的现有分数,让我觉得枚举的序数对序列化/反序列化有影响。
我想避免在将来添加关卡时避免此问题。我也不想记住只在枚举结尾添加级别。
有没有办法确保枚举被一致地反序列化,即使追溯性地添加新值?
答案 0 :(得分:1)
将[DataContract]
属性添加到枚举并使用DataContractSerializer
序列化。在个别值上放置[EnumMember]
属性。
这将导致值按名称序列化,而不是按数值序列化。
为了确保我测试序列化为文件(或者如果是XML序列化的话,还是测试字符串)并查看它存储的内容以确保它有效,并确保它和&# #39;尚未按名称序列化。否则你不确定这是不是原因。
答案 1 :(得分:0)
我最终关注dbc's suggestion并在枚举中添加了显式值。
所以,我改变了Level,
ntdll!RtlUserThreadStart
要
public enum Level
{
Aquarium,
Crescendo,
HungarianDance,
MapleLeafRag,
}
对于我的问题,这是一个很好的简单解决方案,但我认为对于非Unity项目Scott Hannen's answer 可能是要走的路。