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