Trong ứng dụng Máy khách/Máy chủ của chúng tôi, chúng tôi đã sử dụng BinaryFormatter cho quá trình tuần tự hóa. Vì lý do hiệu suất, chúng tôi đang cố di chuyển sang protobuf-net (http://code.google.com/p/protobuf-net/).Làm thế nào để so sánh hai đồ thị đối tượng .NET cho sự khác biệt?
Phần mềm của chúng tôi truyền các biểu đồ lớn với chu kỳ giữa Máy khách và Máy chủ.
Bây giờ tôi đang tìm một cách để đảm bảo rằng dữ liệu đã được tuần tự hóa và deserialized bằng cách sử dụng protobuf là chính xác giống như một trong đó thường được xử lý bởi BinaryFormatter.
So sánh từng chút một là đơn giản: Tôi tuần tự hóa bằng BinaryFormatter vào tệp. Deserialize tập tin này một lần nữa bằng cách sử dụng BinaryFormatter. Sau đó, tôi tuần tự hóa bằng cách sử dụng ProtoBuf vào một tập tin. Deserialize sử dụng ProtoBuf từ tập tin đó. Nối tiếp lại bằng BinaryFormatter thành tệp.
Sau đó, tôi có thể chỉ cần so sánh tệp đó với tệp gốc.
Tuy nhiên, hai tệp đó không bằng 100%. Vì vậy, bây giờ tôi cần phải tìm một cách để theo dõi sự khác biệt xuống.
Có một số công cụ có thể hiển thị dữ liệu đã được BinaryFormatter tuần tự hóa không? Hay bạn có biết một số người trợ giúp khác mà so sánh sâu và cho tôi biết sự khác biệt ở đâu?
Sử dụng XMLSerializer và so sánh hai tệp XML là không thể vì BinaryFormatter có thể tuần tự hóa nhiều dữ liệu hơn XMLSerializer - ngay cả khi không đánh dấu các trường một cách rõ ràng.
Cảm ơn bạn, TH
Tôi có rất nhiều mã ở đây trên SO để so sánh các đối tượng riêng lẻ, nhưng so sánh toàn bộ biểu đồ là ... phức tạp. Nếu tôi phải * đoán *, tôi sẽ tự hỏi nếu có sự khác biệt chính xác datetime nhỏ. –
Xin chào Marc. Nếu các tập tin gần như giống hệt nhau, tôi sẽ đoán như vậy. Tuy nhiên, tôi thiếu khoảng 25% dữ liệu. Bây giờ tôi tự hỏi nếu, ví dụ, tham chiếu cá thể đã được chia sẻ mặc dù họ không nên (vì các tài liệu tham khảo ban đầu đã không trỏ đến cùng một đối tượng) hoặc nếu tôi chỉ quên thêm một số trường vào TypeModel. Một số công cụ sẽ là tuyệt vời mà chỉ cần vẽ đồ thị toàn bộ đồ thị cho một biểu đồ có thể đọc được của con người (tương tự như http://ignatu.co.uk/ViewStateDecoder.aspx (tuy nhiên thuật toán đó không hoạt động với đồ thị lớn của chúng tôi)) – TwinHabit