Dot-Net

.NET XmlSerializer 和對同一對象的多個引用

  • August 29, 2018

我的儲存庫有List<Student>List<Course>並且List<Enrolment>Enrollment 有 Enrolment.Student 和 Enrolment.Course ,它們是前兩個列表中的學生或課程之一的引用。

當我在我的儲存庫上使用 XmlSerializer 時,它會輸出冗餘數據,因為它會序列化每個學生的所有屬性,List<Student>然後再次對List<Enrolment>. 我正在尋找一種優雅的方法來解決這個問題。

反序列化後,我可以使用反序列化創建的重複對象實例中的 ID 值來修復引用,但這似乎很不自然。

修復冗餘輸出的一種方法是 XmlIgnore Enrolment.Student 和 Enrolment.Course 並為序列化創建另外兩個屬性 - Enrolment.StudentID 和 Enrolment.CourseID。但是,在反序列化期間,無法設置 Enrolment.Student 和 Enrolment.Course 的引用(AFAIK),因為反序列化的結果List<Student>不可List<Course>用。

我想到的另一種方法是在我的對象層次結構中序列化較低,分別執行我的每個列表並控制反序列化的順序 - 我寧願不這樣做。

另一種方法是 XmlIgnoreList<Enrolment>並創建一個註冊序列化助手類,該類List<Enrolment>在自身的反序列化完成後進行初始化。這似乎是一個很大的努力。

其他人如何使用 XmlSerializer 序列化/反序列化對同一對象的多個引用?

哦,序列化的痛苦:-> …

從來沒有一個通用的解決方案,我想這就是為什麼 MS 將它從 Silverlight 框架中剝離出來。

我從不依賴 .net 框架的任何自動序列化機制。對於我自己的模型和儲存庫,我通常知道或可以很容易地以程式方式確定哪些屬性是簡單的標量(數字/字元串/等),哪些是指向其他對象的連結(以及哪些是兩者的列表)。

基本上有兩種情況:

1:我們只想序列化/傳輸對象的平面資訊。在這種情況下,我只傳輸連結到其他對象的屬性的相應 ID。然後接收者可以進行後續查詢以獲取他們需要的所有其他對象。

2:我們希望傳遞盡可能多的資訊,即具有多個級別的更深層次的嵌套 XML,主要用於某些報告功能,僅使用 XML 上的一些 CSS 直接顯示所有內容。在這種情況下,實際上希望將相同的對像多次解析到 XML 樹中。

有時我需要稍微調整第一個場景以避免過多的後續查詢呼叫,但通常我相處得很好。即我已經在我們的程式碼庫中建構了我們可以指定我們想要在何時解析哪些附加對象,和/或它在某處配置。

引用自:https://stackoverflow.com/questions/2026238