Есть ли способ скрыть все нулевые значения при использовании стандартного сериализатора .NET Xml? Ниже приведен пример вывода моего класса. Я не хочу выводить целые числа, допускающие значение NULL, если для них установлено значение NULL.
Текущий вывод Xml:
<?xml version="1.0" encoding="utf-8"?>
<myClass>
<myNullableInt p2:nil="true" xmlns:p2="http://www.w3.org/2001/XMLSchema-instance" />
<myOtherInt>-1</myOtherInt>
</myClass>
Что я хочу:
<?xml version="1.0" encoding="utf-8"?>
<myClass>
<myOtherInt>-1</myOtherInt>
</myClass>
c#
.net
xml-serialization
GuruMeditation
источник
источник
В дополнение к тому, что написал Крис Тейлор: если у вас есть что-то сериализованное как атрибут, у вас может быть свойство в вашем классе с именем,
{PropertyName}Specified
чтобы контролировать, следует ли его сериализовать. В коде:источник
{PropertyName}Specified
атрибуты должны иметь тип bool.Существует свойство, называемое
XmlElementAttribute.IsNullable
Если для свойства IsNullable установлено значение true, атрибут xsi: nil создается для членов класса, для которых установлена пустая ссылка.
В следующем примере показано поле с
XmlElementAttribute
примененным к нему, а для свойства IsNullable установлено значение false.Вы можете посмотреть другие,
XmlElementAttribute
чтобы изменить имена в сериализации и т. Д.источник
Вы можете определить некоторые значения по умолчанию, и это предотвратит сериализацию полей.
источник
Я предпочитаю создавать свой собственный xml без автоматически сгенерированных тегов. В этом случае я могу игнорировать создание узлов с нулевыми значениями:
источник
источник
В моем случае все переменные / элементы, допускающие значение NULL, были строкового типа. Итак, я просто выполнил проверку и присвоил им string.Empty в случае NULL. Таким образом я избавился от ненужных атрибутов nil и xmlns (p3: nil = "true" xmlns: p3 = "http://www.w3.org/2001/XMLSchema-instance)
источник