you can use a profile, for example, the COM based profiling API, ICorProfilerInfo::GetObjectSize(), of course, you still need to recursively get the size of all the contained objects
if you class is serializable, you can try something like
MemoryStream ms = new MemoryStream();
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(ms,YourObjectInstance);
Console.WriteLine(ms.ToArray().Length);