Its not really a valid concept here unless you are using unmanaged code. .NET has its own memory management system that can make objects larger in memory than the sum of their parts. Its not the same as in C++ where the size of an object in memory is really equal to the amount of data it contains.
You have 2 ways to do this, if you want to know the size of the hash table for unmanaged code, you can do:
int sizeBytes = System.Runtime.InteropServices.Marshal.SizeOf(Data);
Which will give the size of the object if it were to be marshalled to unmanaged code. Its not really the size in memory.
The other option you have is to serialize it to a memory stream then read the size of the stream. This only works if the objects in your hash table are all serializable. You would have to iterate through it and serialize the objects (not the entire hash table itself since its not serializable).