Only a limited set of .NET objects can be usefully sent across a link with this method. These are objects whose "values" have a meaningful representation in Mathematica:

All other objects have no meaningful "value" representation in Mathematica. For these objects, the relatively useless obj.ToString() is sent. The version of Put in the IKernelLink interface, which is the interface most programmers will be using, will put objects "by reference" if they have no meaningful value representation in Mathematica, meaning that they show up as NETObject expressions.