Do I need to expose a constructor in a WCF DataContract for it to work during object instantiation on the client?

.net, c#, serialization, wcf, wcf-client

Solution

You need to use [OnDeserializing] or [OnDeserialized] attributes to do initialization of DataContract types. See http://msdn.microsoft.com/en-us/library/ms733734.aspx

Problem

I have a class in a WCF service, lets call it A. A is a data contract, which contains as one of its DataMembers a collection of another custom object B. To avoid Null Reference problems on the client side, I instantiate the BList in the constructor like so: ``` [DataContract] public class A { [DataMember] public String name { get; set; } [DataMember] public List<B> BList {get; set; } public A() { BList = new List<B>(); } } ``` My problem is that on the client, this instantiation does not happen and BList appears as null after an object of A is created on the client. I'm guessing that the constructor does not appear on the client. So, do I need to make the constructor an explicit operation contract? If so that would make internal things visible to the client that they shouldn't see, right? How do I make sure that this instantiation happens on the client? Thanks, and sorry if this seems like a dumb question.

Original source