Подтвердить что ты не робот

Установите DataContract и DataMember без всех атрибутов

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

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

Нет, DataContractSerializer - это селектор последовательного выбора - вы должны сказать, что вы хотите включить.

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