Заставить protobuf-net игнорировать интерфейсы IEnumerable / ICollection
Как я могу получить v2 protobuf-net, чтобы игнорировать тот факт, что мой класс реализует ICollection, IEnumerable и т. Д.?
Для этого конкретного сценария я хочу, чтобы только поля, помеченные как [ProtoMember], были сериализованы.
В настоящее время я нахожусь в процессе перехода от использования protobuf-net v1 к использованию v2. У меня есть особая структура, которая теперь неправильно сериализуется из-за изменений. Это выглядит примерно так:
[ProtoContract]
public class FileTree : ICollection<FilePath>, IEnumerable<FilePath>, IEnumerable, INotifyCollectionChanged, INotifyPropertyChanged {
private FileTreeNode _Root;
[ProtoMember (1)]
public FileTreeNode Root {
get { return _Root; }
set { _Root = value; }
}
}
Класс FileTree был написан для объединения путей к файлам, таких как «C: \ happy.txt», «C: \ history.txt», в нечто более похожее
"C:\h"
└─── "appy.txt"
└─── "istory.txt"
Структура устраняет избыточность в строках пути. Итак, я действительно не хочу, чтобы класс FileTree сериализовался с помощью функций IEnumerable, потому что тогда он просто сохраняется как «C: \ happy.txt», «C: \ history.txt» и т. Д. Прямо сейчас, в сериализации объекта FileTree, каждый путь распечатывается полностью.
РЕДАКТИРОВАТЬ: И последнее, что я должен упомянуть - у меня есть функция On_Deserialization в FileTree, которая помечена как [ProtoAfterDeserialization]. Я поставил точку останова в функции, но она не получила удар. Это связано с тем, как этот класс сериализуется?