2012-02-02 22 views
9

Tôi sẽ trải qua rất nhiều mã và đánh dấu các lớp mà bây giờ tôi muốn tồn tại với thuộc tính Tuần tự hóa. Tôi đã không viết công cụ tuần tự hóa/deserization nhị phân như vậy nhưng tôi đoán tôi sẽ trả lời câu hỏi của riêng tôi một khi đã hoàn tất! - nhưng tôi nghĩ tôi sẽ thử một câu trả lời sớm hơn ở đây nếu được. Tôi đã gặp một số mã có chứa một thuộc tính như:Tự động thực hiện các thuộc tính và tuần tự hóa

public string Id 
    { 
     get; 
     set; 
    } 

Liệu "Id" có được đăng theo thứ tự không? Tôi hiểu rằng bên dưới trình biên dịch tự động tạo ra một thành viên lớp học, nhưng điều này có được serialized một cách chính xác (vì tất cả các thành viên dữ liệu của cá thể lớp được ghi vào lưu trữ)? Nó cảm thấy như nó sẽ không kể từ khi bạn không thể đặt thuộc tính Serialized/NonSerialized trên thuộc tính.

Xin cảm ơn trước.

+1

"Tùy thuộc vào việc bạn sử dụng serialization nào. Thời gian chạy serialization, serialization XML, serialization dữ liệu hợp đồng là tất cả khác nhau trong lĩnh vực này. –

+0

Bạn dự định sắp xếp lại lớp học như thế nào? –

+0

@ John: Tôi sẽ sử dụng mã hóa nhị phân – Jeb

Trả lời

8

Bạn có thể sử dụng thuộc tính [field:NonSerialized] để đánh dấu trường ủng hộ sự kiện không thể tuần tự hóa được, tuy nhiên dường như không thể thực hiện với thuộc tính tự động. Với các thuộc tính tự động, các trường sao lưu sẽ được tuần tự hóa và cách duy nhất để ngăn chặn hành vi đó là biến chúng thành các thuộc tính thông thường và chú thích các trường sao lưu rõ ràng với [NonSerialized] như bình thường.

2

Như @John đã chỉ ra trong nhận xét của mình, BinaryFormatter (System.Runtime.Serialization.Formatters.Binary) sẽ tuần tự hóa trường hậu thuẫn được tạo tự động của bạn. Bạn có thể sử dụng serialization tùy chỉnh bằng cách thực hiện giao diện ISerializable và sau đó quyết định cho lớp của bạn mà các giá trị được tuần tự hóa hay không.

Các vấn đề liên quan