Я нахожу атрибуты [DataContract]
и [DataMember]
немного беспорядочными и предпочитаю делать это с помощью кода в способе конфигурации или что-то в этом роде. Возможно ли это?
Установите DataContract и DataMember без всех атрибутов
Ответ 1
Вам не обязательно использовать эти атрибуты. DataContractSerializer
будет сериализовать все общедоступные свойства с помощью getter и setter, но в случае сериализации объектов с свойствами навигации вы легко закончите исключение из-за "циклической ссылки".
Чтобы избежать этого исключения, вы должны либо использовать [DataContract(IsReference = true)]
для вашего класса сущности с помощью DataMember
для каждого свойства, которое вы хотите выполнить serilize, или IgnoreDataMember
для каждого свойства, которое вы не хотите сериализовать.
Последний и самый сложный вариант - это полностью исключить атрибуты и настраиваемые классы, реализующие IDataContractSurrogate
для управления сериализацией вне типа.
Вы также можете написать свой полностью настраиваемый процесс сериализации или использовать сериализацию XML или двоичную сериализацию со всеми его требованиями.
Ответ 2
Нет, DataContractSerializer - это селектор последовательного выбора - вы должны сказать, что вы хотите включить.
С помощью других сериализаторов вам нужно использовать такие вещи, как NonSerializedAttribute или XmlIgnoreAttribute, чтобы заставить сериализатор оставить что-то в покое.