Самый простой способ - реализовать IEnumerable и соответствующий метод Add.
Например, если ваш индексатор использует List для хранения вашего списка, следующий код должен выполнить эту работу:
AddIEnumerable к списку реализуемых интерфейсов.Инициализируйте _list и внедрите свой индексатор.
private List<SomeClass> _list;
...
public override void Add(SomeClass instance)
{
mInstances.Add(instance);
}
public IEnumerator<T> GetEnumerator()
{
foreach (SomeClass instance in _list)
{
yield return instance;
}
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
См. Класс XmlSerializer , который включает следующее примечание:
XmlSerializer предоставляет особый режим для классов, которые реализуют IEnumerableили ICollection.Класс, реализующий IEnumerable, должен реализовывать открытый метод Add, который принимает один параметр.Параметр метода Add должен иметь тот же тип, который возвращается из свойства Current для значения, возвращаемого из GetEnumerator или одной из основ этого типа.Класс, который реализует ICollection (например, CollectionBase) в дополнение к IEnumerable, должен иметь открытое индексированное свойство Item (indexer в C #), которое принимает целое число, и у него должно быть открытое свойство Count типа integer.Параметр метода Add должен быть того же типа, который возвращается из свойства Item или одной из основ этого типа.Для классов, которые реализуют ICollection, значения для сериализации извлекаются из индексированного свойства Item, а не путем вызова GetEnumerator.