Код: Выделить всё
public class Entry : IEnumerable{
public string name { get; set; }
public List items { get; set; }
public Entry()
{
}
public IEnumerator GetEnumerator()
{
yield return this;
if (items != null && items.Count > 0)
{
foreach (var child in items)
{
foreach (var grandChild in child)
yield return grandChild;
}
}
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}
Хотя реализован интерфейс IEnumerable, он реализован для рекурсивного обхода каждой вложенной записи ниже текущей. , это приводит к странному выводу (см. в конце).
Если интерфейс IEnumerable удален, он сериализуется правильно.
Десериализация обычно работает в обоих направлениях (из исходных данных).
Никаких ошибок и предупреждений.
Поэтому мой вопрос: это ошибка или я делаю что-то ужасно неправильно. Любая информация приветствуется.
Результат (частичный):
Код: Выделить всё
- &o0
- *o0
- &o1
- *o1
- &o2
- *o2
- &o3
- *o3
- &o4
- *o4
- &o5
- *o5
- &o6
- *o6
- &o7
- *o7
- *o4
- *o5
- *o6
- *o7
- *o3
Код: Выделить всё
- name: Runtime
items:
- name: Util
items:
- name: NaturalStringComparer
items:
Подробнее здесь: https://stackoverflow.com/questions/589 ... ird-output