Làm thế nào tôi có thể nhận được v2 của protobuf-net để bỏ qua thực tế là lớp của tôi thực hiện ICollection, IEnumerable, vv?Force protobuf-net để bỏ qua giao diện IEnumerable/ICollection
Đối với trường hợp cụ thể này, tôi chỉ muốn các trường tôi đã gắn cờ là [ProtoMember] sẽ được đăng.
Tôi hiện đang trong quá trình chuyển đổi từ sử dụng protobuf-net v1 sang sử dụng v2. Tôi có một cấu trúc đặc biệt mà bây giờ đang tuần tự hóa không đúng vì sự thay đổi. Nó trông giống như sau:
[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; }
}
}
Lớp FileTree được viết sụp đổ đường dẫn tập tin như "C: \ happy.txt" "C: \ history.txt" vào một cái gì đó giống như
"C:\h"
└─── "appy.txt"
└─── "istory.txt"
Cấu trúc loại bỏ sự dư thừa trong chuỗi đường dẫn. Vì vậy, tôi thực sự không muốn lớp FileTree được serialized thông qua các chức năng IEnumerable bởi vì sau đó nó chỉ được lưu trữ như "C: \ happy.txt", "C: \ history.txt", vv Ngay bây giờ, trong serialization của đối tượng FileTree, mỗi đường dẫn sẽ được in đầy đủ.
EDIT: Một điều cuối cùng tôi nên đề cập - Tôi có một chức năng On_Deserialization trong FileTree được gắn thẻ với [ProtoAfterDeserialization]. Tôi đặt một điểm ngắt trong hàm, nhưng nó không bị tấn công. Điều này có liên quan đến cách lớp này đang được tuần tự hóa không?
Tôi không * nhận thức * rằng đây là thay đổi đột phá giữa v1 và v2; có lẽ sự khác biệt tinh tế là v1 đã tìm kiếm nhiều hơn cho 'IList', hoặc kết hợp của 'IEnumerable '** với ** một' Add' công khai. –