Собрать сериализованные элементы нескольких перечислимых членов в один родительский элемент - PullRequest
0 голосов
/ 12 июня 2019

Рассмотрим следующий класс:

[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")] к свойствам Users и Roles, но возникает InvalidOperationException.

Было бы здорово, если бы вопрос можно было решить без реализации IXmlSerializable.

1 Ответ

1 голос
/ 12 июня 2019

Похоже, вам просто нужно создать класс "Доступ" для вложения ваших пользователей / ролей.

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