Tôi đã đọc gần đây về việc tuần tự hóa. Tôi đã đọc rằng khi tôi sử dụng XmlSerialization tôi không thể serialize đồ thị đối tượng. Đồ thị đối tượng là gì và tại sao tôi không thể tuần tự hóa nó một cách đơn giản?Biểu đồ đối tượng là gì và làm cách nào để tuần tự hóa một số
Trả lời
Biểu đồ đối tượng không phải là một đối tượng duy nhất, mà là một tập hợp các đối tượng liên quan. Ví dụ đơn giản, hãy xem xét:
public class Node {
public string Name {...}
public Node Parent {...}
public List<Node> Children {...}
}
nơi mỗi đứa trẻ biết về cha mẹ (và cha mẹ biết về trẻ).
Vấn đề là xml đó là một cây dựa trên thuộc tính đối tượng ... và nó muốn chỉ hướng dẫn họ - tức là với phụ huynh đơn giản/con:
- A (biết rằng B là con của nó)
- B (biết rằng A là mẹ của nó)
rằng sẽ serialize như:
<Node>
<Name>A</Name>
<!-- no Parent as A is the top node, so null -->
<Children>
<Node>
<Name>B</Name>
<Parent>
<Node>
<Name>A</Name>
*** boom ***
Bạn có thể thấy rằng chúng tôi đã quay lại A, vì vậy chúng tôi hiện đang trong vòng lặp vô tận.
XmlSerializer
có thể tuần tự hóa cây dữ liệu, nhưng không phải là biểu đồ đầy đủ. Bạn có thể đánh dấu các thuộc tính để bỏ qua, ví dụ:
[XmlIgnore]
public Node Parent {...}
Và bây giờ nó sẽ hoạt động, nhưng chúng tôi sẽ phải sửa lại Parent
sau đó.
Ngược lại, một số trình nối tiếp khác có thể xử lý đồ thị (DataContractSerializer
có thể theo yêu cầu). Nó thực hiện điều này bằng cách theo dõi các đối tượng chống lại một khóa duy nhất - nhưng sau đó đầu ra không phải là những gì bạn mong đợi từ xml thông thường.
Biểu đồ đối tượng là tập hợp các đối tượng tham chiếu lẫn nhau.
Việc tuần tự hóa biểu đồ đối tượng là khó khăn. Bộ nối tiếp sẽ phải gán một ID duy nhất cho mọi đối tượng và sau đó thay thế các tham chiếu bằng các ID duy nhất.
Nếu nó đang được tuần tự hóa ở định dạng XML và xử lý đồ thị đối tượng, nó sẽ phải thêm thuộc tính "OBJECT_ID" (hoặc một số tên khác) vào mọi phần tử. Điều này sẽ rất dễ dàng để phá vỡ: điều gì sẽ xảy ra nếu bạn thêm một thuộc tính có cùng tên cho lớp bạn đang sắp xếp?
Giải pháp đơn giản nhất là không hỗ trợ nó.
.NET cung cấp tuần tự hóa nhị phân liên quan đến vấn đề này cũng như vấn đề tham chiếu vòng tròn.
Một đối tượng chung graph bao gồm một tập hợp các đối tượng giữ tham chiếu với nhau. Nếu bạn có một cây đối tượng không có các liên kết ngược, việc tuần tự hóa và deserialization rất đơn giản. Với một đồ thị chung, quá trình tuần tự (de) cần phải theo dõi danh tính của từng đối tượng và sử dụng một số thuật toán đánh dấu và quét để đảm bảo rằng các đối tượng không được (de) tuần tự hóa hai lần.
- 1. Làm cách nào để tuần tự hóa một đối tượng có giao diện là thuộc tính?
- 2. BOOST_SERIALIZATION_NVP làm gì khi tuần tự hóa đối tượng?
- 3. Cách tốt nhất để tuần tự hóa các đối tượng JavaScript thành XML là gì?
- 4. Làm cách nào để tuần tự hóa một đối tượng thành một XDocument?
- 5. Làm cách nào để tuần tự hóa một đối tượng đơn giản trong sdk iPhone?
- 6. Đối tượng tuần tự hóa thành XmlDocument
- 7. Làm cách nào để tuần tự hóa một đối tượng và lưu nó vào một tệp trong Android?
- 8. Để tuần tự hóa dữ liệu hoặc đối tượng có nghĩa là gì?
- 9. Làm thế nào để tuần tự hóa một mảng đối tượng jQuery cho JSON Post?
- 10. Làm cách nào để tuần tự hóa đối tượng System.Windows.Media.Color thành chuỗi sRGB?
- 11. Làm thế nào để tuần tự hóa một đối tượng thành XML mà không nhận xmlns = "..."?
- 12. Làm thế nào để thay đổi một đối tượng được tuần tự hóa?
- 13. Làm thế nào để tuần tự hóa một đối tượng JavaScript chung thành XML
- 14. Mẫu Proxy tuần tự hóa là gì?
- 15. StackOverflowError khi tuần tự hóa một đối tượng trong Java
- 16. Làm thế nào để tuần tự hóa một gói?
- 17. Làm thế nào để tuần tự hóa/deserialize một hashmap?
- 18. Làm cách nào để tuần tự hóa một đối tượng ẩn danh để gửi qua dịch vụ web SOAP?
- 19. Điều gì sẽ là cách chính xác để tuần tự hóa đối tượng Java này trong Clojure?
- 20. Làm thế nào để chỉnh sửa trường Rails được tuần tự hóa trong một biểu mẫu?
- 21. Tuần tự hóa đối tượng dịch vụ WCF
- 22. Các đối tượng này trong biểu đồ jmap là gì?
- 23. tuần tự hóa các đối tượng python thành XML
- 24. Tuần tự hóa WCF với kế thừa đối tượng?
- 25. Thực hiện tuần tự hóa đối tượng thực tế?
- 26. Tham khảo thông tư ngăn ngừa việc tuần tự hóa đồ thị đối tượng
- 27. Cách tốt nhất để jSON tuần tự hóa một .NET DataTable trong WCF là gì?
- 28. Làm thế nào để tuần tự hóa các đối tượng db.Model thành json?
- 29. Đại diện của Java đối tượng được tuần tự hóa
- 30. Làm cách nào để tuần tự hóa tất cả các thuộc tính của đối tượng được ánh xạ NHibernate?