c# wpf serialization .net-4.0 protobuf-net

c# - Fuerza protobuf-net para ignorar las interfaces IEnumerable/ICollection



wpf serialization (1)

[ProtoContract(IgnoreListHandling = true)] public class FileTree : ICollection<FilePath> ... { ... }

Deberías hacerlo. Honestamente, no creo haber considerado las devoluciones de llamadas en las listas, ya que se manejan de forma muy diferente a las entidades, pero con lo anterior debería funcionar. Avísame si no es así.

De la documentación intellisense:

Obtiene o establece un valor que indica que este tipo NO se debe tratar como una lista, incluso si tiene características similares a listas (enumerable, add, etc.)

¿Cómo puedo obtener v2 de protobuf-net para ignorar el hecho de que mi clase implementa ICollection, IEnumerable, etc.?

Para este escenario en particular, solo quiero serializar los campos que he marcado como [ProtoMember].

Actualmente estoy en el proceso de convertir de usar protobuf-net v1 a usar v2. Tengo una estructura particular que ahora se está serializando incorrectamente debido al cambio. Se ve algo como lo siguiente:

[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; } } }

La clase FileTree se escribió para colapsar rutas de archivos como "C: / happy.txt" "C: / history.txt" en algo más parecido a

"C:/h" └─── "appy.txt" └─── "istory.txt"

La estructura elimina la redundancia en las cadenas de ruta. Por lo tanto, realmente no quiero que la clase FileTree se serialice a través de las funciones de IEnumerable porque solo se almacena como "C: / happy.txt", "C: / history.txt", etc. En este momento, en la serialización de un objeto FileTree, cada ruta se imprime en su totalidad.

EDITAR: Una última cosa que debería mencionar: tengo una función On_Deserialization en FileTree que está etiquetada con [ProtoAfterDeserialization]. Puse un punto de interrupción en la función, pero no está siendo golpeado. ¿Esto está relacionado con la forma en que se está serializando esta clase?