enum的序数影响BinaryFormatter反序列化?

时间:2016-07-03 01:44:56

标签: c# serialization enums binary-serialization

我在游戏中的分数序列化中遇到了一个奇怪的问题。

我有一个LevelHighScore课程:

[System.Serializable]
public class LevelHighScores
{
    readonly Dictionary<Level, ModeScores> scores;
    // clipped out the rest for simplicity
}

使用枚举键Level

我最近为我的游戏添加了一些新关卡,但是我没有将新关卡添加到枚举的末尾,而是按字母顺序添加了新的枚举。现在,当我加载游戏时,我的新关卡会有与之相关的现有分数,让我觉得枚举的序数对序列化/反序列化有影响。

我想避免在将来添加关卡时避免此问题。我也不想记住只在枚举结尾添加级别。

有没有办法确保枚举被一致地反序列化,即使追溯性地添加新值?

2 个答案:

答案 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 可能是要走的路。