This is not properly a question but something more like a thought I had recently.
I’m taking XmlAttribute to XmlSerialize a class as an example: you can set attributes to a class to choose which properties should be serialized, but the same thing can be done quite easy by implementing a teorical interface IXmlSerializable (it does exist something similar, I don’t remember) and by overloading a method “Serialize” for that class which just call Serialize on properties you want to serialize (this.myProp1.Serialize()), same for Deserialize
So what I’m basically saying: isn’t Attribute method a bit redundant? (I like it actually, but I don’t find it logically different from an interface)
Thanks for any answer, as I’ve said this is just a thought… hopefully someone will find it interesting
Update 1: Well I explained myself in a wrong way, what I’m asking is “why should I choose attribute instead of an Interface (or opposite)”, not exactly this specific case (I took serialization because was the first thing that pop out in my mind), by the way thanks for your answer because they are very interesting
Well, from the best I can tell, they are logically different.
Implementing IXmlSerializable directly impacts the class itself, because you are adding an interface and one or more methods into the implementation of the class. In essence, You are making your own class directly responsibly for the it’s serialization.
However, adding the XmlAttribute attributes does not directly impact the functionality of the class, instead you are just decorating it with attributes so that XmlSerializer can carry out the actual serialization functiohality. In this case, you are deferring the serialization to the XmlSerializer class, and providing just enough metadata about your class for XmlSerializer to do it’s work.
This is why I prefer the latter attribute approach. When I’m writing a class, I want it to be serializable, but the last thing I care about is the specifics of the implementation, so I always start with thaqt approach and 99% of the time it works fine with very little work. However, if you did need more fine-grain control over the serialization, the implement the IXmlSerializable interface and write your own serialization code.