Сериализация XML - не включать элемент, когда нет данных - PullRequest
0 голосов
/ 24 июня 2019

В настоящее время я использую класс XmlSerializer для записи определенных данных в документ XML, однако, когда конкретное поле не содержит данных, оно в настоящее время записывает его, как показано ниже:

<ElementA />

Можно ли вообще не записывать элемент, если для этого поля нет данных?

Спасибо

Ответы [ 2 ]

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

Взгляните на метод ShouldSerilize.В вашем классе вам просто нужно реализовать метод bool ShouldSerilizeElementA(), например:

 public bool ShouldSerilizeElementA() => ElementA != null;
0 голосов
/ 24 июня 2019

Возможный дубликат Как мне сказать xmlwriter игнорировать пустые узлы в C #? :

Подробное описание этого подхода здесь .

Short: используйте регулярное выражение для уничтожения пустых элементов из полученной строки.

static Regex regex = new Regex(@"\<[\w-_.: ]*\>\<\!\[CDATA\[\]\]\>\</[\w-_.: ]*\>|\<[\w-_.: ]*\>\</[\w-_.: ]*\>|<[\w-_.: ]*/\>|\<[\w-_.: ]*[/]+\>|\<[\w-_.: ]*[\s]xmlns[:\w]*=""[\w-/_.: ]*""\>\</[\w-_.: ]*\>|<[\w-_.: ]*[\s]xmlns[:\w]*=""[\w-/_.: ]*""[\s]*/\>|\<[\w-_.: ]*[\s]xmlns[:\w]*=""[\w-/_.: ]*""\>\<\!\[CDATA\[\]\]\>\</[\w-_.: ]*\>",RegexOptions.Compiled);

Здесь этот способ используется для написания пользовательского класса XMLWriter / XMLReader, который не пропускает пустые элементы.

...