5

Có thể là DataContractSerializer không xác định sai một đối tượng nếu các trường không nằm trong lệnh "đúng" (bất kể điều đó có nghĩa là gì) không?Serialize/deserialize objects - thứ tự các trường quan trọng?

Các lớp mà tôi cố gắng sắp xếp/deserialize không có thuộc tính thứ tự được đặt trên các trường/thuộc tính. Tuy nhiên, một trong các trường của tôi luôn được deserialized là null mặc dù nó có giá trị không null (nó thực sự chứa một danh sách các chuỗi).

Khi tôi di chuyển hai phần tử XML trong tệp tuần tự xung quanh để khớp với thứ tự trong một ví dụ XML khác (cho việc deserialization làm việc mà không có vấn đề) mọi thứ bắt đầu hoạt động.

Điều này không có ý nghĩa với tôi nhưng có thể ai đó biết rõ hơn. ;)

Trả lời

13

Để đủ điều kiện cho việc tuần tự hóa/tuần tự hóa chính xác theo số DataContractSerializer, tất cả các điều sau phải đúng.

  1. Lớp học phải được tuần tự hóa phải có SerializableAttribute hoặc DataContractAttribute bộ;
  2. Thuộc tính và trường của lớp phải được sắp xếp theo yêu cầu DataMemberAttribute bộ;
  3. Loại dữ liệu của thuộc tính hoặc trường có thể tuần tự phải được tuần tự hóa (ví dụ: có một ctor công khai và kế thừa ISerializable);
  4. Lớp học phải được đăng theo thứ tự phải thực hiện IExtensibleDataObject;
  5. Lưu ý: các trường có thể tuần tự có thể công khai hoặc riêng tư.
  6. Members must be in alphabetical order hoặc bạn nên sử dụng Order-property của DataMemberAttribute.

Vì vậy, thứ tự khai báo không. Nếu các thành viên không theo thứ tự bảng chữ cái, chúng sẽ bị bỏ qua. Tra cứu this answer at StackOverflow for an example, có thể nó áp dụng cho trường hợp của bạn.

+0

Kể từ .NET 3.5 SP1, quy tắc đầu tiên và thứ hai có thể được bỏ qua. – JustAMartin

+0

@Martin: r u chắc chắn? Ví dụ, đối với các dịch vụ web, yêu cầu serializability, chúng yêu cầu 'DataMemberAttribute' vẫn còn, ngay cả trong .NET 4.0. Bạn có liên kết đến tham chiếu không? Tôi muốn được quan tâm để đọc thêm về điều đó (và sau đó cập nhật câu trả lời của tôi). – Abel

+0

Liên kết trong quy tắc 6 đã chết – bkribbs

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