XML-сериализация добавить элемент со свойствами - PullRequest
0 голосов
/ 18 июня 2019

У меня есть два класса:

public class A
{
    [XmlElement("Content")]
    public B SomeName { get; set; }
}

public class B
{
    [XmlAttribute]
    public int X { get; set; }
}

Он сериализуется в XML следующим образом:

<A>
  <Content X="5" />
</A>

Я хотел бы указать имя элемента в Content и получить что-то вроде этого

<A>
  <Content>
      <Some element X="5" />
  </Content>
</A>

Могу ли я сделать это без создания нового класса, который будет содержать B, используя стандартную сериализацию xml?

1 Ответ

0 голосов
/ 18 июня 2019

Один из возможных вариантов - объявить свойство SomeName в классе A как набор объектов типа B, а затем использовать атрибуты [XmlArray] и [XmlArrayItem].

Вот рабочий пример.Помните, что я изменил свойство SomeName на SomeNames.

[Serializable]
public class A
{
    [XmlArray("Content")]
    [XmlArrayItem("Some")]
    public List<B> SomeNames { get; set; } = new List<B>();
}

public class B
{
    [XmlAttribute(AttributeName = "element")]
    public int X { get; set; }
}

public static void XmlSerialize()
{
    var a = new A {SomeNames = new List<B> {new B() {X = 5}}};
    var serializer = new XmlSerializer(typeof(A));
    var settings = new XmlWriterSettings() {Indent = true};
    using var stream = XmlWriter.Create("serialized.xml", settings);
    serializer.Serialize(stream, a);
}

Результат, полученный в этом примере, будет таким, как вы:

<?xml version="1.0" encoding="utf-8"?>
<A xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Content>
    <Some element="5" />
  </Content>
</A>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...