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

Collect serialized items of multiple enumerable members to a same parent

考虑以下 class:

[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; }
}

现在我想转换 class 定义以获得以下 XML 序列化的预期结果 class:

<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实现就可以解决就好了。

看来您只需要制作一个 "Access" class 来嵌套您的 Users/Roles。

[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; }
}