I created a WCF service and to the default service I added another operation contract on the main DataContract:
[OperationContract]
void DoSomething(UserData
Add the attribute to your 'UserData' class [KnownType(typeof(CompositeType))]
Like:
[DataContract]
[KnownType(typeof(CompositeType))]
public class UserData
{
[DataMember]
public uint One { get; set; }
[DataMember]
public CompositeType Extra { get; set; }
public UserData() { ctor. code }
}
http://msdn.microsoft.com/en-us/library/ms730167.aspx
Edit:
http://msdn.microsoft.com/en-us/library/system.operatingsystem.aspx
The OperatingSystem class has a few properties which relate to other classes. You could include all these classes in the known types but the dependency chain could get rather large and I would highly recommend not using the Operating System class at all.
You should work out what information you actually need from the Operating System class and create your own DTO to pass back in the response. That way you can ensure all the types are easily definable on your contract.