Могу ли я контролировать сериализацию определенных полей с помощью XmlSerializer - PullRequest
4 голосов
/ 23 декабря 2011

Могу ли я контролировать сериализацию определенных полей с помощью XmlSerializer в c #? Пример Fox, свойство с именем «Тип» (строка), которое будет сериализовано как что-то другое вместо строки. Заранее спасибо.

Ответы [ 3 ]

5 голосов
/ 23 декабря 2011

Вы можете управлять несколькими вещами с помощью XmlElement / XmlAttribute аннотаций - имени элемента, будь то атрибут или полный элемент XML и т. Д.Однако вы не можете изменить тип напрямую.Если вам требуется поддержка любого типа сложной схемы сериализации, XmlSerializer не является хорошим выбором из-за множества ограничений.Вам лучше использовать DataContractSerializer (см. «Использование контрактов данных» в документации WCF) или, возможно, даже написать его самостоятельно.

Если вы просто хотите изменить тип XMLПолучая сериализованные данные (например, используя пользовательский тип XML или пространство имен), вы можете сделать это с атрибутом XmlType, но это будет работать только для объявленных вами типов, а не дляпримитивные типы CLR (например, вы не можете превратить строку в целое число или другой более сложный тип).

1 голос
/ 23 декабря 2011

Вы можете контролировать то, что вы хотите сериализовать, через атрибут XMLIgnore. Это не будет сериализовать свойство, украшенное этим атрибутом.

Вы также можете использовать XMLType для управления тем, как сериализуется тип сериализатором XML, но это неВ любом случае это означает, что вы можете напрямую влиять на тип CLR.

Вы не можете изменять типы CLR, используя сериализацию.

1 голос
/ 23 декабря 2011

Я думаю, вам нужен интерфейс IXmlSerializable

Вы не можете контролировать печать, используя только атрибуты.Вы должны свернуть свой собственный код для сериализации / десериализации класса.Этот интерфейс позволяет вам сделать это.

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