Изменить способ сериализации XmlElement в C # (System.Xml.Serialization) - PullRequest
0 голосов
/ 24 января 2019

Допустим, у меня есть класс SomeDTO, который я хочу сериализовать в основной функции:

[XmlElement(MethodCall)]
public class SomeDTO
{
  [XmlElement("AllowStereo")]
  bool? UseStereo {get; set;}

  [XmlElement("Kg")]
  int? Weight{get; set;}
}

static Main()
{
  var methodCall = new SomeDTO();
  methodCall.UseStereo =  true;

  XmlSerializer serializer = new XmlSerializer(typeof(SomeDTO));
  var stream = new MemoryStream();
  var writer = new StreamWriter(stream);
  serializer.serialize(writer, methodCall);
  //Code to display the stream
}

Как я могу повлиять на преобразование UseSecondChannel в xml?

хочу вывод вида:

<methodcall>
  <member>
    <name>AllowStereo<\name>
    <value><boolean>1<\boolean><value>
  <\member>
<\methodcall>

У нас есть сценарий использования, где мы используем xmlrpc для обмена сообщениями. Каждый DTO представляет определенный RPC. Классы из Business logic используются для заполнения DTO.

Я не смог найти способ повлиять на функциональность XmlElementAttribute нужным образом. Я ожидал найти аргумент конструктора или виртуальную функцию для переопределения.

Кроме того, я не смог найти другой связанный с Xml атрибут в пространстве имен System.Xml.Serialization, который мог бы помочь мне преобразовать простой Элемент во вложенный элемент.

DTO содержит много свойств, но в XML должны отображаться только те «set». Вес не был установлен в основной программе, поэтому не должен отображаться в XML.

Фактический результат:

<methodcall>
  <AllowStereo>1><\AllowStereo>
<\methodcall>
...