1.View state is a cache for storing temp data between postbacks.
2.The data are stored/get from there based on a given unique key.
3.You can store any object inside it, even that object is created by using generics, but when you get the data from the cache you must convert it to its real type like in the next example:
GenericList<T> myList;
myList = new new GenericList<MyClass>();
ViewState["MyGenericList"] = myList;
var myData = (GenericList<MyClass>)ViewState["MyGenericList"];