2009-04-08 33 views

Trả lời

4

Tôi đang nghĩ chủ yếu của XmlSerializer đây:

  • nó được giới hạn dữ liệu cây tương tự; nó không thể xử lý đồ thị đối tượng đầy đủ
  • nó được giới hạn cho các thành viên công cộng, trên lớp công
  • nó có thể không thực sự làm được gì nhiều với object thành viên
  • nó có một số điểm yếu xung quanh Generics
  • giống như nhiều serializers, nó sẽ không chạm vào các thuộc tính ví dụ về một bộ sưu tập (thực hành xấu ở nơi đầu tiên)
  • xml đơn giản là không phải lúc nào cũng là một lựa chọn tốt cho dữ liệu lớn (không kém, cho hiệu suất)
  • đòi hỏi một constructor parameterless công

DataContractSerializer giải quyết một số trong số này, nhưng có những hạn chế riêng của mình:

  • nó không thể xử lý các giá trị trong thuộc tính
  • đòi hỏi .NET 3.0 (vì vậy không sử dụng nhiều trong 2,0)
+0

Vấn đề thành viên nào có thể được giải quyết bằng cách sử dụng DataContractSerializer –

+0

đúng - sẽ làm rõ ... –

+0

Đây là tất cả những điều tốt đẹp để biết về khuôn khổ Xml serialization trong .NET, nhưng tôi sẽ không nói chúng là những tình huống phổ biến mà XML serialization "không thành công". Ví dụ, Xml serializer serializes chỉ công khai đọc/ghi các thành viên là một thuộc tính của khuôn khổ serialization, không phải là một kịch bản mà nó không thành công. Rằng nó đòi hỏi các lớp để có một ctor parameterless public cũng không phải là một "thất bại" cho mỗi se. – Cheeso

0

TimeSpan đối tượng không thể tuần tự hóa được. IDictionary Các loại thực hiện không thể tuần tự hóa (mặc dù chúng có thể được tuần tự hóa với một số thao tác xoa bóp thủ công).

1

Tùy thuộc vào bộ nối tiếp, các tham chiếu tuần hoàn có thể không hoạt động

0

AFAIK, các lớp được đánh dấu là [Lỗi thời] sẽ không được xê-ri hóa bởi XmlSerializer từ .NET 2.0

1

Sử dụng từ khóa bóng cũng đã phá vỡ serialization và deserialization đối với tôi vì shadowing gây ra một thực hiện mới của tài sản đó để tồn tại làm cho nó tương thích để xây dựng lại thích hợp. Chỉ sử dụng các tình trạng quá tải nếu bạn muốn gõ lại cho một lớp con cụ thể.

+1

Đối với những người không biết VB.NET, "' Shadows' "tương đương với' new' trong C#: 'public new int PropertyName {get; set;}' trong đó lớp cơ sở có 'public virtual int PropertyName. ..'. –

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