DataContractSerializer vs XmlSerializer: Ưu và nhược điểm của từng bộ nối tiếp


84

Ứng dụng máy tính để bàn của tôi sắp xếp các đối tượng bằng cách sử dụng XmlSerializer. Tôi được đề nghị sử dụng đòn bẩy DataContractSerializerthay thế.
Tôi nên sử dụng các tình huống DataContractSerializernào?

Cảm ơn nhiều

Bình luận.
1. Tệp XML đầu ra được lưu trữ cục bộ. Không có ứng dụng nào khác giải mã hóa các đối tượng từ tệp XML đó.
2. Ứng dụng của tôi chạy với .NET Framework 3.5 SP1.


Câu trả lời:


112

Dan Rigsby có bài viết cuối cùng về điều này - hãy đọc nó!

XmlSerializer so với DataContractSerializer (lưu trữ web)

Anh ấy nói tất cả những gì cần nói, và theo một cách rất thuyết phục.

Nói ngắn gọn:

XmlSerializer:

  • đã có từ rất lâu
  • là "chọn không tham gia"; mọi thứ công khai đều được đăng nhiều kỳ, trừ khi bạn bảo không ([XmlIgnore])

DataContractSerializer là:

  • đứa trẻ mới trong thị trấn
  • được tối ưu hóa cho tốc độ (thường nhanh hơn XmlSerializer khoảng 10%)
  • "opt-in" - chỉ những thứ bạn đánh dấu cụ thể là [DataMember]sẽ được đăng nhiều kỳ
  • nhưng bất cứ điều gì được đánh dấu bằng [DataMember]sẽ được tuần tự - cho dù đó là publichoặcprivate
  • không hỗ trợ các thuộc tính XML (vì lý do tốc độ)

2
@ Paul-SebastianManole: DataContractSerializer không hỗ trợ các thuộc tính XML - vì lý do tốc độ. Những gì để xây dựng?
marc_s

6
@ Paul-SebastianManole: nếu XML nguồn của bạn chứa các thuộc tính trên phần tử XML (như <Customer Id="42"> ...) sau đó bạn lựa chọn duy nhất đang được sử dụng serializer XML
marc_s

2
Điều này có thể hữu ích, được lấy từ MSDN: Lớp XmlSerializer hỗ trợ tập hợp các loại hẹp hơn nhiều so với lớp DataContractSerializer, nhưng cho phép kiểm soát nhiều hơn đối với XML kết quả và hỗ trợ nhiều hơn tiêu chuẩn ngôn ngữ định nghĩa lược đồ XML (XSD). Nó cũng không yêu cầu bất kỳ thuộc tính khai báo nào trên các loại có thể tuần tự hóa ... Lớp XmlSerializer không hỗ trợ các loại hợp đồng dữ liệu. MSDN .
Paul-Sebastian Manole

1
@OO: không chỉ chọn tham gia, trong .NET 3.5 SP1 và mới hơn - mà đối với tôi, đó vẫn là cách làm việc được ưu tiên . Cho phép bạn tính bộ mà nếu không không thể được thiết lập (như thứ tự tuần tự, không gian tên và nhiều hơn nữa!)
marc_s

17
Cảnh báo lớn nhất về DataContractSerializer - khi giải không khí, nó quan tâm đến thứ tự của các phần tử và không thành công nếu chúng không đúng thứ tự. Imho, trừ khi bạn đang sử dụng các cụm chính xác giống nhau ở cả hai đầu, điều này làm cho nó trở nên nguy hiểm không thể sử dụng được.
Pxtl
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.