What is the difference between
SerializeField is only for attributes of a class. What is the difference between the above two, then?
Unless I'm mistaken, there is no difference -
System.Serializable is just the fully qualified name of
C# has this notions of namespaces; a namespace is a way to organize code (it's a "space for (type) names") - think of a namespace as of a box that contain stuff you might want to use. This helps organize things and avoid naming conflicts (if, say, two independently developed libraries use the same name for a class).
So, the Serializable attribute is declared/placed within the System namespace. When you say
System.Serializable, you're just saying "get Serializable from System".
But if you have a
using System; statement at the top, you can omit the namespace and just write
Serializable; the compiler can then infer that it means
System.Serializable, saving you a few keystrokes.