[XML, .NET] Переопределение атрибутов сериализации

ruben-69

Есть иерархическая структура. Ее необходимо сериализовать. Но не просто скинуть все данные, а сериализовывать только те, которые имеют не "пустые" значения. ("Пустые" значения определены для каждого поля/свойства класса. Пример: 0, None, string.empty)
Идея такая, что надо как-то менять атрибуты, контролирующие сериализацию. То есть возможно ли в момент выполнения где-то проставить, например, [XmlIgnoreAttribute].
Читабельного материала пока найти не удалось
Пытаюсь осилить XmlAttributeOverrides, но пока не очень понятно
Вопрос: как менять атрибуты во время выполнения программы?

Dasar

аттрибуты менять никак, но можно поддержать IXmlSerializable, и установленные атрибуты интерпретировать самому как хочется

JooF

А я бы вообще сделал свою сериализацию. Конечно, это может быть займет больше времени, но темм не менее придает тебе большую гибкость.

ruben-69

просто у меня уже есть тупой навороченный сериализатор. и не хочется ваять еще один такой же, который будет незначительно (но принципиально) отличаться от существующего.

aleks058

Может быть, попробовать изменить требования?
Они совсем не выглядят критическими.

ruben-69

про какие требования ты говоришь?
Мне нужен сериализатор, но такой, чтобы не было сериализации пустых элементов. И все. То есть нужно как-то контролировать, что можно сериализовать,а что нет. Но не заранее, а в процессе выполнения.
При этом уже есть сериализатор, который формирует xml по иерархии классов. Хочется как-то соптимизировать его

Dasar

какой объем xml-я планируется?

ruben-69

сериализовать надо find-dialog с очень большим числом параметров, которые уместились в хитрой иерархии классов

Dasar

так какой объем результирующего xml-я? 100 байт? метр? 100 мб?

aleks058



про какие требования ты говоришь?

Забей на требования "чтобы не было сериализации пустых элементов".
Чем мешают эти пустые элементы?

ruben-69

это самое главное требование, ради которого была поставлена задача

ruben-69

существующий сериализатор генерит файл объемом в 3К

agaaaa

а можно gzip использовать?

ruben-69

зачем?

agaaaa

ну тебя же напрягает размер файла
ае! 512-ое сообщение 8-)

ruben-69

меня не напрягает размер файла.
меня напрягают пустые элементы

durka82

Раз у тебя уже есть серилизатор, то что мешает изменить его, чтобы он работал как ты хочешь?
Это должно чуть ли не одной строчкой меняться (ведь в нем точно есть проверка на то, пустой элемент или нет; а если нет - как раз ее и надо добавить).

ruben-69

нет. не в этом дело. есть класс-оболочка, который стандартным сериализатором сериализуется.
проблема пустых значений, кажется, решена атрибутом [XmlElement(IsNullable = false)]
короче, проблема видимо решена

Dasar

существующий сериализатор генерит файл объемом в 3К
на таком объеме, можно как вариант, результирующий xml-ник патчить, вместо изменения сериалайзера.
Оставить комментарий
Имя или ник:
Комментарий: