OK, I know what you’re thinking, "why write a method you do not want people to use?" Right?
Well, in short, I have a class that needs to be serialized to XML. In order for the XmlSerializer to do its magic, the class must have a default, empty constructor:
public class MyClass { public MyClass() { // required for xml serialization } }
So, I need to have it, but I don’t want people to use it, so is there any attribute that can be use to mark the method as "DO NOT USE"?
I was thinking of using the Obsolete attribute (since this can stop the build), but that just seems kinda "wrong", is there any other way of doing this, or do I need to go ahead and bite the bullet? 🙂
Update
OK, I have accepted Keith’s answer, since I guess in my heart of hearts, I totally agree. This is why I asked the question in the first place, I don’t like the notion of having the Obsolete attribute.
However…
There is still a problem, while we are being notified in intellisense, ideally, we would like to break the build, so is there any way to do this? Perhaps create a custom attribute?
More focused question has been created here.
If a class is
[Serialisable](i.e. it can be copied around the place as needed) the param-less constructor is needed to deserialise.I’m guessing that you want to force your code’s access to pass defaults for your properties to a parameterised constructor.
Basically you’re saying that it’s OK for the
XmlSerializerto make a copy and then set properties, but you don’t want your own code to.To some extent I think this is over-designing.
Just add XML comments that detail what properties need initialising (and what to).
Don’t use
[Obsolete], because it isn’t. Reserve that for genuinely deprecated methods.