Установить DataContract и DataMember без всех атрибутов - PullRequest
15 голосов
/ 01 сентября 2011

Я нахожу атрибуты [DataContract] и [DataMember] немного грязными и предпочел бы сделать это с кодом в методе конфигурации или чем-то в этом роде. Это возможно?

Ответы [ 2 ]

16 голосов
/ 01 сентября 2011

Вам не нужно использовать эти атрибуты вообще.DataContractSerializer будет сериализовать все общедоступные свойства с помощью методов получения и установки, но в случае сериализации объектов со свойствами навигации вы легко завершите исключение из-за «циклической ссылки».

Чтобы избежать этого исключения, вы должны либо использовать [DataContract(IsReference = true)] в своем классе сущности с DataMember для каждого свойства, которое хотите сериализовать, или IgnoreDataMember для каждого свойства, которое вы не хотите сериализовать.

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

Вы также можете написать полностью собственный процесс сериализации или использовать XML-сериализацию или двоичный файл.сериализация со всеми ее требованиями.

1 голос
/ 01 сентября 2011

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

С другими сериализаторами вам нужно использовать такие вещи, как NonSerializedAttribute или XmlIgnoreAttribute, чтобы указать сериализатору оставить все в покое.

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