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