[英]C#, Why does XmlSerializer serialize the base object instead of the Interface?
[英]Serialize item in base of condition using XmlSerializer c#
我有一個對象,它的參數之一是對象列表。
例如,帶有檢查清單的Student對象:
[Serializable]
public class Student
{
[XmlAttribute("Name")]
public string Name {get; set;}
[XmlArray("Exams")]
public List<Exam> Exams {get; set;}
}
[Serializable]
public class Exam
{
[XmlAttribute("Course")]
public string Course;
[XmlAttribute("Score")]
public int Score;
}
我的目標是序列化Student模型,並僅將滿足某些條件的考試納入XML中,例如,我只希望分數(<5)低的考試。
可以使用System.Xml.Serialization
命名空間中存在的XmlSerializer來完成這種操作嗎?
您可以使用LINQ查詢簡單地創建一個具有令人滿意的考試成績的學生,然后序列化結果
var studentToSerialize = new Student {
Name = student.Name,
Exams = student.Exams.where(e => e.Score < 5)
}
// Your serialization logic here
我不知道有提供“每個集合元素”條件序列化的序列化器; 有些執行“每個屬性”的條件序列化,但是...並非如此。 最簡單的事情是僅使用您要序列化的項目創建學生的副本 。 更復雜的方法是編寫某種自定義的IList<Exam>
填充程序,它包裝相同的List<Exam>
實例並應用過濾,但是...這很丑陋,我強烈建議您不要嘗試這樣做(問題,例如:如果在包裝類型上調用Add
,並且所添加的元素得分較高,會發生什么?)。
因此,我的建議是在序列化之前進行過濾-通過刪除不需要的項或通過僅創建所需項的克隆來進行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.