Jak mogę uzyskać v2 protokołu protobuf-net, aby zignorować fakt, że moja klasa implementuje ICollection, IEnumerable, etc?Wymuś protobuf-net, aby zignorować interfejsy IEnumerable/ICollection
Dla tego konkretnego scenariusza chcę tylko, aby pola oznaczone jako [ProtoMember] były serializowane.
Jestem obecnie w trakcie konwersji z używania protobuf-net v1 do używania v2. Mam szczególną strukturę, która teraz jest nieprawidłowo serializowana z powodu zmiany. Wygląda to mniej więcej tak:
[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; }
}
}
Klasa FileTree został napisany aby zwinąć ścieżki plików typu "C: \ happy.txt" "C: \ history.txt" na coś bardziej jak
"C:\h"
└─── "appy.txt"
└─── "istory.txt"
Struktura eliminuje nadmiarowość w łańcuchach ścieżek. Tak naprawdę, nie chcę, aby klasa FileTree była serializowana za pomocą funkcji IEnumerable, ponieważ wtedy jest przechowywana jako "C: \ happy.txt", "C: \ history.txt", itp. W tej chwili w serializacji obiektu FileTree, każda ścieżka jest drukowana w całości.
EDIT: Ostatnią rzeczą, należy wspomnieć - Mam funkcję On_Deserialization w FileTree który jest oznaczony [ProtoAfterDeserialization]. Stawiam punkt przerwania w działaniu, ale nie zostaje trafiony. Czy jest to związane ze sposobem serializowania tej klasy?
Nie jestem * świadomy *, że była to przełomowa zmiana między wersjami v1 i v2; być może subtelną różnicą jest to, że v1 szukał raczej dla 'IList' lub kombinacji 'IEnumerable ' ** z ** publicznym 'Add'. –