Какой сериализатор использовать?

Я использовал DataContractSerializer, и до сих пор он предоставлял все, что мне нужно. Теперь мне нужны еще две функции, и я уже знаю, что они невозможны с DataContractSerializer.

  1. Мне нужно иметь возможность сериализовать некоторые поля как XmlComments
  2. Некоторые члены должны быть сериализованы напрямую как атрибут Xml в содержащем объекте.

XmlSerializer не поддерживает подписку и не поддерживает нужные мне поля / приватные данные, поэтому, к сожалению, об этом не может быть и речи.

Могу ли я каким-то образом создать свой собственный сериализатор, который учитывает существующий атрибут «XmlAttribute» и мой собственный атрибут «XmlComment» при использовании DataContractSerializer в качестве основы?

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

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


person Riki    schedule 17.05.2013    source источник
comment
XmlSerializer не поддерживает подписку и не поддерживает поля / частные объекты - ›почему вы не можете предоставить поля / частные права как общедоступные свойства?   -  person loopedcode    schedule 18.05.2013
comment
Я использую loopcode на этом. Вы должны создать полностью отдельный объект модели данных, единственной целью которого является сериализация / десериализация данных. Отдельно преобразуйте эту модель данных в / из ваших бизнес-объектов. Таким образом, ваши бизнес-объекты могут поддерживать свои частные поля / реализации, а ваши объекты модели данных могут сосредоточиться на общедоступных свойствах или различных украшениях атрибутов XML для соответствия требуемой схеме.   -  person Chris Sinclair    schedule 18.05.2013
comment
@ChrisSinclair, он не хочет комментариев XML ... даже с DTO, разработанными только для сериализации, которая потребует некоторой настраиваемой сериализации.   -  person Yaur    schedule 18.05.2013


Ответы (1)


Вы можете использовать XmlSerializer. Вам просто нужно будет реализовать IXmlSerializable на объектах, которые не могут быть обработаны по правилам по умолчанию, и делать тяжелую работу самостоятельно. Это все еще проще, чем накатывать собственный сериализатор IMO.

person Yaur    schedule 18.05.2013