将多个可枚举成员的序列化项目收集到同一父级

时间:2019-06-12 10:26:39

标签: c# xml-serialization xmlserializer

请考虑以下课程:

[Serializable]
public class MyClass
{
    [XmlAttribute("id")]
    public int ID { get; set; }

    [XmlArrayItem("User")]
    public List<string> Users { get; set; }

    [XmlArrayItem("Role")]
    public List<string> Roles { get; set; }
}

现在,我要转换类定义,以获取该类实例的XML序列化的预期结果:

<MyClass id="123">
  <Access>
    <User>User A</User>
    <User>User B</User>
    <User>User C</User>
    <Role>Role A</Role>
    <Role>Role B</Role>
    <Role>Role C</Role>
  </Access>
</MyClass>

此外,它必须可以反序列化。我尝试将[Xml Array("Access")]属性同时应用于UsersRoles属性,但是发生了InvalidOperationException

如果不实施IXmlSerializable就能解决问题,那就太好了。

1 个答案:

答案 0 :(得分:1)

看起来您只需要创建一个“访问”类即可嵌套您的用户/角色。

[XmlRoot(ElementName="Access")]
public class Access {
    [XmlElement(ElementName="User")]
    public List<string> User { get; set; }
    [XmlElement(ElementName="Role")]
    public List<string> Role { get; set; }
}

[XmlRoot(ElementName="MyClass")]
public class MyClass {
    [XmlElement(ElementName="Access")]
    public Access Access { get; set; }
    [XmlAttribute(AttributeName="id")]
    public string Id { get; set; }
}