Автоматически минимизировать имена атрибутов / элементов при использовании XmlSerializer - PullRequest
2 голосов
/ 24 апреля 2010

При сериализации класса C # с использованием XmlSerializer атрибуты / элементы, представляющие свойства класса, будут иметь те же имена, что и в исходном коде.

Я знаю, что вы можете переопределить это, сделав так:

[XmlAttribute("num")]
public int NumberOfThingsThatAbcXyz { get; set; }

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

Есть ли способ минимизировать эти имена без необходимости придумывать и аннотировать все короткой строкой? Получающийся в результате XML, легко читаемый человеком, не является проблемой.

Ответы [ 4 ]

2 голосов
/ 24 апреля 2010

Хми, следите за микрооптимизацией, подобной этой. Невероятно сложно заставить их окупиться современным компьютерным оборудованием. Истинная стоимость операций ввода-вывода, связанных с обработкой XML, заключается не в объеме данных, а в его определении. Байты дешевы, их передача уже оптимизирована. Это считывающая головка жесткого диска, которая где-то на сервере, возможно, на вашей собственной машине, определяет скорость работы вашей программы. Как только он окажется в нужном месте, чтение байта становится почти таким же дорогим, как чтение килобайта. Память работает так же.

Окончательный совет: если бы это была обычная оптимизация, они бы придумали что-то лучше, чем IXmlSerializable.

1 голос
/ 25 апреля 2010

Природа атрибутов подразумевает, что это невозможно сделать. См. can-attribute-be-add-dynamic-in-c # , чтобы узнать почему. Даже если бы это можно было сделать, я согласен с Гансом, что, вероятно, оно того не стоит. Если вы действительно обеспокоены этим, то вам следует воспользоваться одним из предложений Марка.

1 голос
/ 24 апреля 2010

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

Другая альтернатива - просто сжать данные; xml молнии удивительно хорошо, благодаря всем повторяющимся именам узлов.

1 голос
/ 24 апреля 2010

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

...