Я не думаю, что вам нужен собственный сериализатор, я думаю, вам нужны собственные методы сериализации в ваших классах.
Например: если вы используете XmlSerializer
, вы можете реализовать IXmlSerializable
в своем классе данных и вручную реализовать методы, которые могут охватывать любую комбинацию версий, личных или общедоступных данных или что-либо еще. Точно так же ISerializable
можно использовать для настройки поведения, если вы используете двоичную сериализацию.
Если вам требуется поддержка универсальных коллекций, вы можете реализовать класс, определенный примерно так, чтобы решить эту проблему (для примера рассмотрим сериализатор Xml):
public class FooList : List<Foo>, IXmlSerializable
Это позволяет настроить сериализацию полуграничного класса коллекции. Или, возможно, более многоразового использования:
public class CustomSerializableList<T> : List<T>, IXmlSerializable where T : IXmlSerializable
... который дает вам общий список, содержание которого гарантированно равно IXmlSerializable
, что означает, что реализация IXmlSerializable
для самого списка довольно проста.