Порядковый номер перечисления, влияющий на десериализацию BinaryFormatter?

У меня странная проблема с сериализацией партитур в моей игре.

У меня есть класс LevelHighScore:

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

С ключом enum, Level,

Недавно я добавил несколько новых уровней в свою игру, но вместо добавления новых уровней в конец перечисления я добавил новые перечисления в алфавитном порядке. Теперь, когда я загружаю игру, мои новые уровни имеют существующие оценки, связанные с ними, заставляя меня думать, что порядковые номера перечислений влияют на сериализацию / десериализацию.

Я хочу избежать этой проблемы при добавлении уровней в будущем. Я также не хочу помнить, чтобы добавить только уровни в конец перечисления.

Есть ли способ обеспечить последовательную десериализацию enum, даже если задним числом добавляются новые значения?

2 ответа

Решение

В итоге я последовал совету dbc и добавил явные значения в enum.

Итак, я изменил уровень с,

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 , ответ Скотта Ханнена - это, вероятно, путь.

Добавить [DataContract] приписать enum и сериализовать, используя DataContractSerializer, Поместите [EnumMember] атрибут на отдельные значения.

Это приведет к сериализации значения по имени, а не по числовому значению.

Чтобы убедиться, что я протестирую сериализацию в файл (или строку, если это XML-сериализация) и посмотрю, что он хранит, чтобы убедиться, что он работает, и чтобы он еще не сериализовался по имени. В противном случае вы не будете знать наверняка, в этом ли причина.

Другие вопросы по тегам