В моем приложении я использую список объектов, реализующих мой ISorter интерфейс с выставками одного метода void Sort (MyClass myClass)
Пока я создал этосписок в точке входа в мое приложение с жестко заданным набором реализаций ISorter . Теперь я нахожусь в точке, где я хотел бы иметь возможность сохранить и загрузить этот список из файла.
Я бы хотел, чтобы формат был XML, чтобы его можно было редактировать вручную, но я обнаружил это. NET XMLSerializer класс не может сериализовать интерфейсы. Он может сериализовать список базовых классов, при условии, что я помечаю базовый класс соответствующими атрибутами:
[System.Xml.Serialization.XmlInclude(typeof(MyClassA))]
[System.Xml.Serialization.XmlInclude(typeof(MyClassB))]
class MyBaseClass
Мне это не нравится, так как он загромождает мой класс специфическими для xml атрибутами, когда я могу захотеть заменить сериализацию xmlпозже с другим методом хранения.
В чем недостаток замены интерфейса ISort базовым классом SortBase для упрощения сериализации? Является ли использование интерфейса здесь неправильно с самого начала? Должен ли я сохранить интерфейс, но реализовать его, используя SortBase класс, из которого происходят все мои другие классы?
Как я могу абстрагировать хранилище так, чтобы реализация хранилищаможет быть изменено позже, и избежать украшения моих классов с атрибутами xml?
Любая дополнительная информация о передовых практиках, касающихся хранения / загрузки данных, будет полезна
РЕДАКТИРОВАТЬ: Идея заключается в том, что пользователь может создать текстовый файл (предпочтительнее atm XML), определяющий операции сортировки, которые можно загружать и применять к набору данных.
РЕДАКТИРОВАТЬ2: Я упростил этоситуация
class Foo{
List<ISorter> MySorters
}
interface ISorter{
void Sort(MyClass myClass)
}
class SortByColor : ISorter{
public string SomeColorProperty{get;set;}
void Sort(MyClass myClass)
}
class SortByName: ISorter{
public string SomeNameProperty{get;set;}
void Sort(MyClass myClass)
}
Я хотел бы передать мой Список некоторому методу хранения / загрузки, который может создать / загрузить список из некоторого источника данных, лежащего в основе (например, файла XML)
EDIT3: Возможно, в конечном итоге я буду использовать DataContractserializer или XMLSerializer , поскольку это решит мою проблему, если я предоставлю общие базовые классыs. Я ожидал, что будет более элегантный способ, которым это можно будет обработать, не загрязняя мои объекты атрибутами