Bạn không thể - đồng bằng và đơn giản. Thuộc tính là cần thiết cho DataContractSerializer để nhận các phần tử để tuần tự hóa. Trong hợp đồng với XmlSerializer, mà về cơ bản chỉ serializes tất cả mọi thứ (trừ khi bạn rõ ràng cho nó bỏ qua nó), DataContractSerializer là "opt-in" - bạn phải nói rõ ràng (bằng các thuộc tính) mà các trường và/hoặc thuộc tính để tuần tự hóa.
Cập nhật: Như nhiều người đã chỉ ra, với .NET 3.5 SP1, Microsoft nới lỏng các quy tắc này một chút - bất kỳ thuộc tính đọc/ghi nào sẽ được tự động hóa bởi DataContractSerializer. Đồng thời, lớp học của bạn cũng cần phải có một constructor parameterless mặc định - âm thanh như các yêu cầu chính xác, chúng tôi đã cho XmlSerializer cách trở lại khi ....
Tất nhiên, đây:
- không cho phép bạn sắp xếp thứ tự riêng tư - nếu bạn muốn tuần tự hóa, bạn phải hiển thị nó là thuộc tính đọc/ghi công khai
- không cho phép bạn chỉ định thứ tự được chọn của các tham số - nó sẽ chỉ sử dụng chúng trong thứ tự chúng xuất hiện trong lớp
- bây giờ yêu cầu bạn phải có một hàm tạo không tham số trong lớp của bạn một lần nữa cho đến r deserialization
Tôi vẫn nghĩ rằng điều này phải rõ ràng và rõ ràng, làm cho những người không còn cần thiết mở ra con đường cho chương trình lười biếng/cẩu thả - Tôi không thích nó. Nhưng nếu bạn muốn, bạn có thể sử dụng nó bây giờ không đánh dấu một cách rõ ràng tài sản của bạn với [DataMember] .....
Marc
Nguồn
2009-04-24 05:20:26
Tôi đã thực sự hy vọng bạn sẽ sai nhưng sau nhiều googling tôi sợ bạn nói đúng. Không thể sử dụng XmlSerializer (vấn đề tham chiếu vòng tròn làm việc với Khung thực thể). Ah tốt, các lớp học vô danh nó được. – aleemb
Vâng, tôi đã đọc thêm một chút về điều này ngày hôm nay, và ở đây tôi thấy rằng nếu các lớp của bạn được sử dụng bởi DataContractSerializer được đánh dấu bằng [Serializable], thì theo mặc định chúng sẽ được tuần tự hóa giống như định dạng SOAP cũ - MỌI một trường bất kể khả năng hiển thị được bao gồm. Đó có thể là sự giúp đỡ cho bạn có thể? –
Cũng không thực sự vì vấn đề của tôi thực sự là tôi không thể chạm vào các lớp được tạo tự động và tôi cần có khả năng bỏ qua các trường bên ngoài. Tôi đang sử dụng dự trong các truy vấn LINQ của tôi để có được xung quanh này bây giờ mà hoạt động tốt. – aleemb