C#XML序列化数组

时间:2016-01-08 14:42:15

标签: c# arrays xml serialization

我想基于某些条件序列化数组的某些特定元素。

例如:

public class Team 
{
    public string Name {get; set;}  
    public Person[] Staff;}

public class Person
{
    public string Name {get; set;}
    public NrOfHolidays {get; set;}
}

在序列化Team类时,我只想序列化Staff数组中那些NrOfHolidays大于10的成员。

有没有办法可以做到这一点?

我知道ShouldSerialize[MemberName]函数如何用于序列化/不序列化给定成员,但我不知道它是否可以应用于作为成员的数组元素。

编辑: 谢谢你的回复。

我刚发现这个post。 这是我面临的完全相同的问题,但这里提出的解决方案是针对JSON的。我正在寻找类似于上面文章中提出的解决方案,该解决方案适用于XML序列化。

2 个答案:

答案 0 :(得分:1)

您可以将数组标记为不可序列化,然后创建序列化属性,使用linq查询过滤该数组:

public class Team 
{
    public string Name {get; set;}  
    [XmlIgnoreAttribute]
    public Person[] Staff{ get; set; }
    public Person[] SerializationStaff
    {

        get
        { 
              return Staff == null ? null : Staff.Where(s => s.NrOfHolidays > 10).ToArray(); 
        }

        set
        {
             Staff = value;
        }
    }
}

public class Person
{
    public string Name {get; set;}
    public int NrOfHolidays {get; set;}
}

答案 1 :(得分:0)

为什么不创建一个新团队,只包含那些具有以下条件的Person

var newTeam = new Team(myTeam.Staff.Where(x => x.Holidays > 10));

假设你有Team的构造函数,它需要一组Person。现在,您可以序列化该团队而不是原始团队。

如果不使用default-ctor并在之后设置属性:

var newTeam = new Team();
newTeam.Stuff = myOldTeam.Staff.Where(...);

这不需要对Team课程进行任何更改,但是您必须在客户端做一些小工作。