如何让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中有一个On_Deserialization函数,它用[ProtoAfterDeserialization]标记。我在函数中放了一个断点,但它没有被击中。这与此类序列化的方式有关吗?
答案 0 :(得分:8)
[ProtoContract(IgnoreListHandling = true)]
public class FileTree : ICollection<FilePath> ...
{ ... }
应该这样做。老实说,我不认为我已经考虑过列表上的回调,因为它们的处理方式与实体非常不同,但上面的内容应该可行。如果没有,请告诉我。
来自intellisense文档:
获取或设置一个值,指示不应将此类型视为列表,即使它具有熟悉的类似列表的特征(可枚举,添加等)