2010-09-22 2 views
1

Я изучаю сериализацию в C#, и у меня есть основы, но теперь я пытаюсь сделать что-то более сложное, и я ищу некоторые рекомендации по лучшей практике (я могу добиться того, что Я хочу, я просто хочу знать «правильный»/самый простой/наименьший код/​​самый надежный способ его выполнения).Пользовательский сериализатор и наследование в C#

У меня гоночный трек, который состоит из разделов. Каждый тип раздела наследуется от общего класса TrackSection. Класс TrackSection содержит множество данных о геометрии и других вещах, которые я не хочу сохранять, и при вызове конструктора ему нужна некоторая контекстная информация, поэтому я реализовал интерфейс ISerializable и предоставил свои собственные методы для обработки (de) сериализации. Классы, которые унаследованы от TrackSection, намного проще, и я был бы рад, если бы все поля были автоматически сериализованы, но я предполагаю, что, поскольку базовый класс ISerializable, вероятно, им также нужно сделать это вручную (я добавил десериализацию конструктор и вызовите конструктор десериализации базового класса в каждом). Когда дело доходит до сериализации, хотя я не уверен, что делать, я бы ожидал, что метод GetObjectData() ISerializable будет виртуальным, чтобы я мог расширить сериализацию в подклассах. Нужно ли просто реализовать собственный виртуальный метод, который вызывается из базового класса GetObjectData(), или я все это неправильно?

Как я уже сказал, у меня есть работа, но любое лучшее решение или какие-либо общие советы о том, что я делаю, было бы очень полезно, поскольку я не могу не чувствовать, что мое решение немного сложнее, чем нужно быть. Благодарю.

+0

битых особого момента там, конечно, я могу просто пометить метод GetObjectData() как виртуальный в базовом классе ... –

ответ

1

Если вы делаете что-то, где вы должны реализовать ISerializable, вы могли бы, вместо того, чтобы просто пометить класс с атрибутом Serializable и отметьте поля, которые вы не хотите сериализовать NonSerialized

+0

Я подумал об этом, но мой конструктор требует некоторой информации контекста, и я не был уверен, как это сделать без пользовательских методов (кроме статического класса, который хранит контекстную информацию, но это не будет потокобезопасным). –

Смежные вопросы