影响 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 项目 可能是可行的方法。