【问题标题】:Serialize item in base of condition using XmlSerializer c#使用 XmlSerializer c# 在条件基础中序列化项目
【发布时间】:2018-10-01 15:22:22
【问题描述】:

我有一个对象,它的参数之一是对象列表。

例如,带有考试列表的学生对象:

[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 中,例如我只想要低 (

这种操作可以使用存在于System.Xml.Serialization命名空间中的XmlSerializer来完成吗?

【问题讨论】:

  • 次要注意:[Serializable] 不会以任何方式影响XmlSerializer - 您可以将其删除(除非您也在某处使用BinaryFormatter

标签: c# xml xml-serialization xmlserializer


【解决方案1】:

我不知道任何提供“每个集合元素”条件序列化的序列化程序;有些人做“每个属性”的条件序列化,但......不是这个。最简单的方法是使用您想要序列化的项目创建学生的副本。更复杂的方法是编写某种自定义IList&lt;Exam&gt; shim,它包装相同的List&lt;Exam&gt; 实例并应用过滤,但是......这很丑,我强烈建议不要尝试这样做(问题,例如:如果在包装类型上调用Add,并且正在添加的元素具有高分,会发生什么?)。

所以我的建议是在序列化之前过滤 - 通过删除不需要的项目,或者通过创建仅包含所需项目的克隆。

【讨论】:

    【解决方案2】:

    您可以使用 LINQ 查询简单地创建一个考试成绩令人满意的学生,然后序列化结果

    var studentToSerialize = new Student { 
               Name = student.Name,
               Exams = student.Exams.where(e => e.Score < 5)
        }
    // Your serialization logic here
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-24
      • 1970-01-01
      • 2010-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-26
      • 2019-03-13
      相关资源
      最近更新 更多