Самое простое, что вам нужно сделать, - это по-прежнему использовать сериализацию, IMO, но уделить больше внимания сериализованной форме классов (что вам действительно следует делать в любом случае). Например:
- Явно определите SerialUID.
- Определите вашу собственную сериализованную форму, где это необходимо.
Сериализованная форма является частью API класса, и ее дизайн должен быть тщательно продуман.
Я не буду вдаваться в подробности, так как почти все, что я сказал, происходит из Effective Java. Вместо этого я отсылаю вас к нему, в частности к главам о сериализации. Он предупреждает вас обо всех проблемах, с которыми вы сталкиваетесь, и предоставляет правильные решения проблемы:
http://www.amazon.com/Effective-Java-2nd-Joshua-Bloch/dp/0321356683
С учетом сказанного, если вы все еще рассматриваете подход без сериализации, вот пара:
XML-сортировка
Как уже указывалось многими, это вариант, но я думаю, что вы все равно столкнетесь с теми же проблемами с обратной совместимостью. Однако, с помощью XML-маршалинга, мы надеемся, вы сразу же поймете это, поскольку некоторые фреймворки могут выполнять некоторые проверки во время инициализации.
Преобразование в / из YAML
Это идея, с которой я играю, но мне очень понравился формат YAML (по крайней мере, как пользовательский формат toString ()). Но на самом деле единственное отличие для вас состоит в том, что вы будете использовать YAML вместо XML. Единственное преимущество заключается в том, что YAML немного более удобочитаем, чем XML. Применяются те же ограничения.