我该如何让protobuf-net的v2版本忽略我的类实现了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对象的序列化中,每个路径都被完整地打印出来。
编辑: 我还应该提到最后一件事——在FileTree中,我有一个标记为[ProtoAfterDeserialization]的On_Deserialization函数。我在函数中设置了断点,但没有命中。这是否与该类的序列化方式有关?
IList<T>
,或者是IEnumerable<T>
与公共Add
的组合。 - Marc Gravell