DataContractSerializer doesn't call my constructor?
.net, c#, constructor, datacontractserializer, serialization
Solution
`DataContractSerializer` (like `BinaryFormatter`) doesn't use any constructor. It creates the object as empty memory.
For example:
Type type = typeof(Customer);
object obj = System.Runtime.Serialization.
FormatterServices.GetUninitializedObject(type);
The assumption is that the deserialization process (or callbacks if necessary) will fully initialize it.
Problem
I just realized something crazy, which I assumed to be completely impossible : when deserializing an object, the DataContractSerializer doesn't call the constructor ! Take this class, for instance : ``` [DataContract] public class Book { public Book() { // breakpoint here } [DataMember(Order = 0)] public string Title { get; set; } [DataMember(Order = 1)] public string Author { get; set; } [DataMember(Order = 2)] public string Summary { get; set; } } ``` When I deserialize an object of that class, the breakpoint is not hit. I have absolutely no idea how it is possible, since it is the only constructor for this object ! I assumed that perhaps an additional constructor was generated by the compiler because of the `DataContract` attribute, but I couldn't find it through reflection... So, what I'd like to know is this : how could an instance of my class be created without the constructor being called ?? NOTE: I know that I can use the `OnDeserializing` attribute to initialize my object when deserialization begins, this is not the subject of my question.