tags:

views:

109

answers:

1

I have reasonably limited data to move between silverlight and a WCF service. So I have set up some datacontracts. I was hoping to be able to use the same classes to use for some limited data validation on the client side, without needing the overhead of DTOs and stuff.

I have a contract something like this:

[DataContract]
class MyObject
{
   private String _id;
   [DataMember]
   public String ID
        {
            get
            {
                return _id;
            }
            set
            {
                _id = value;
                DoStuff();
            }
}

Now when I deserialize the object the setter will be run. This will set the private variable _id which is good. But I don't want the DoStuff() to be run on deserialization.

I had hoped to use the [OnDeserializing] and [OnDeserialized] attributes. I could have defined a bool flag that I could use to control what gets run in the setter. This actually works on the server side but Silverlight doesn't have those attributes.

Any suggestions?

A: 

I would recommend not overloading the usage of these classes to perform logic. This is your service data contract. You shouldn't touch the Silverlight proxy classes that get generated. I recommend that you put your validation logic into other classes that you invoke after deserialization is complete. Otherwise, you might start getting errors in your serialization code when your errors are actually in your data.

Michael S. Scherotter
As i said I don't have a lot of data to move around. I'm trying to avoid having to define an object multiple times just to passing data through the layers. I miss ADO.NET datasets...