Есть несколько вещей, на которые стоит обратить внимание, например, Кевин упомянул любой метод .Clone()
или .Copy()
. Если вы строите класс сами, то будьте осторожны с методом .MemberwiseClone()
, так как он будет делать мелкие копии объекта.
Что касается сериализации. Предотвратить общую сериализацию можно, не помечая [SerializableAttribute()]
своим классом. Я не уверен, что есть способ предотвратить XmlSerialization напрямую. Но есть несколько вещей, которые вы могли бы сделать, чтобы предотвратить это, если бы вы строили класс.
Если вы создаете класс и не предоставляете конструктор по умолчанию, XmlDeserializer не будет работать, поскольку он использует конструктор по умолчанию для перестройки объекта. Однако я верю, что эта функциональность изменилась в 4.0, так что, возможно, вы захотите больше в этом разобраться. Использование атрибута [XmlIgnore]
для полей и свойств yoru также сделает сериализацию бесполезной.
Важной частью здесь является то, что человек, пытающийся сделать это, понимает, что это не должно быть сделано, не то, что это не может. Если кто-то действительно хочет выполнить сериализацию / десериализацию в вашем классе, то вы не можете остановить все возможности, поскольку он может реализовать свою собственную сериализацию / десериализацию вашего объекта. Также иногда подразумевается сериализация синглетонов, например, в случае настроек приложения или пользовательских настроек. Намерение состоит в том, чтобы как-то проинформировать человека, пытающегося сериализоваться / десериализоваться, об этом.