Nếu bạn đang sử dụng BinaryFormatter
, thì bao gồm toàn bộ gõ tên trong dữ liệu, trong đó bao gồm các hội đồng mà DTO là trong (loại luôn được xác định bởi hội đồng của họ). Một tùy chọn ở đây là tạo một thư viện DTO riêng biệt mà bạn tham chiếu từ mỗi - nhưng lưu ý rằng BinaryFormatter
vẫn không đáng tin cậy khi nói đến phiên bản: Tôi đã thấy mọi người mất dữ liệu vì họ đã chỉnh sửa DTO của họ và mọi thứ đều ngừng hoạt động.
Tôi khuyên bạn nên sử dụng trình nối tiếp không phụ thuộc vào loại; ví dụ: XmlSerializer
/DataContractSerializer
/JSON.NET
/ServiceStack's JsonSerializer
hoặc protobuf-net. Tất cả những sẽ làm việc tốt nhưng quan trọng sẽ không chiến đấu bạn, theo hai cách khác nhau:
- họ rất thân thiện với phiên bản
- họ không quan tâm nếu bạn di chuyển các loại giữa cụm
Ngay cả với điều này, nó có lẽ thuận tiện nhất để duy trì một hội đồng DTO riêng biệt cho các loại được tuần tự hóa, nhưng nó không buộc bạn. Cuối cùng, vì các serializers này đều rất vui khi làm việc với hệ điều hành chéo/cross-version/cross-language/cross-CPU, thực tế chỉ là "các assembly khác nhau" là rất nhiều "meh, any".
Lấy chìa khóa: BinaryFormatter
có thể dễ vỡ. Tôi không bao giờ đề xuất nó cho bất cứ điều gì ngoại trừ dữ liệu trong chuyến bay (ví dụ, remoting giữa hai trường hợp AppDomain
). Tôi chắc chắn sẽ không sử dụng nó cho bất cứ điều gì đó là tồn tại trong bất kỳ thời gian, bởi vì tôi chỉ đơn giản là không thể đảm bảo rằng tôi sẽ có thể tải lại nó trong tương lai.
Nguồn
2013-05-08 09:43:34
Nếu bạn đang sử dụng tuần tự hóa nhị phân .NET, bạn sẽ cần phải thực sự tham chiếu cùng loại cơ bản (như trong một từ cùng một DLL). Nếu bạn cũng cần phải chuyển sang một loại khác, bạn sẽ cần sử dụng một giao thức tuần tự hóa khác. –
Bạn cần đặt định nghĩa của lớp được tuần tự hóa vào một thư viện lớp riêng biệt, mà bạn tham chiếu từ cả hai ứng dụng (do đó chia sẻ định nghĩa lớp). –