Làm thế nào để bạn 'de-serialize' một lớp dẫn xuất từ dữ liệu tuần tự? Hoặc có lẽ tôi nên nói, có cách nào tốt hơn để 'de-serialize' dữ liệu vào các lớp học có nguồn gốc? Ví dụ, giả sử bạn có một lớp cơ sở ảo thuần túy (B) được thừa hưởng bởi ba lớp khác, X, Y và Z. Hơn nữa, chúng ta có một phương thức, serialize(), sẽ dịch X: B, Y: B và Z: B vào dữ liệu được tuần tự hóa.Làm thế nào để bạn 'de-serialize' một lớp dẫn xuất từ dữ liệu tuần tự?
Bằng cách này, nó có thể được giới hạn trên một ổ cắm, một đường ống có tên, v.v ... cho một quá trình từ xa.
Vấn đề tôi gặp phải là, làm cách nào để tạo đối tượng thích hợp từ dữ liệu được tuần tự hóa?
Giải pháp duy nhất tôi có thể đưa ra là bao gồm số nhận dạng trong dữ liệu được tuần tự hóa cho biết loại đối tượng có nguồn gốc cuối cùng. Trong trường hợp người nhận, trước tiên phân tích trường kiểu có nguồn gốc từ dữ liệu tuần tự hóa, và sau đó sử dụng một câu lệnh chuyển đổi (hoặc một loại logic nào đó) để gọi hàm tạo thích hợp.
Ví dụ:
B deserialize(serial_data)
{
parse the derived type from the serial_data
switch (derived type)
case X
return X(serial_data)
case Y
return Y(serial_data)
case Z
return Z(serial_data)
}
Vì vậy, sau khi biết các loại đối tượng có nguồn gốc chúng tôi gọi thích hợp có nguồn gốc constructor loại.
Tuy nhiên, điều này cảm thấy khó xử và cồng kềnh. Tôi hy vọng có một cách làm hùng hồn hơn để làm điều này. Lanhung?
serialization nhỏ gọn (bit-wise) có thể cắn vào ngay trong mông, đặc biệt là nếu bạn có kế hoạch để tiết kiệm những thứ vào các tập tin. Nhiều năm trôi qua và các lớp học thay đổi, bạn sẽ hơi say khi bạn cố gắng tải lại chúng. Vì lý do đó, việc tạo các tệp tự tạo tài liệu và phiên bản là một ý tưởng hay. Chỉ khi khách hàng và máy chủ ở tất cả các lần đồng ý về giao thức được sử dụng, là nó OK để gửi byte thẳng. Nếu không, sau đó tôi sẽ sử dụng 'XML/JSON'. Tuy nhiên, tôi cũng sẽ xem xét những thứ có thể làm cho điều này dễ dàng hơn, chẳng hạn như 'SOAP', v.v. –
@Hamish +1, làm cho câu trả lời đó trở thành một câu trả lời! –