ViewState can store any types of object, but the object have to be seralizable. Mark the class object as seralizable. The variables declared in the object also need to be seralizable. String, value type, and other simple type are already seralizable.
To manually modify the viewstate, it can be operated at the override method LoadViewStates and SaveViewStates.