Ну, общий ответ - не делай этого! Хотя viewstate является (может быть) зашифрованным, он не был предназначен для хранения конфиденциальных данных. Причина в том, что данные о состоянии представления могут быть получены третьей стороной и впоследствии расшифрованы.
Но это не значит, что вы не должны этого делать ... :-) Во-первых, ваше соединение через https, поэтому все, что вы передаете, уже зашифровано. Это означает, что сбор конфиденциальных данных будет очень сложным. Если третье лицо похитит ваши конфиденциальные данные, ему сначала придется расшифровать соединение, а затем расшифровать состояние просмотра. Поэтому злоумышленнику, вероятно, будет гораздо проще использовать другие подходы для получения ваших данных (например, обманывать пользователей, фишинг и т. Д.).
Так что для безопасности ваших данных я бы остановился на том, что их достаточно хранить в зашифрованном виде и использовать https.
Выбор между 1) и 2) не должен влиять или мало влиять на производительность. Когда вы сохраняете объект в viewstate, он сериализуется и затем сохраняется, поэтому независимо от того, какой подход вы выберете, данные сериализуются для вас. Разработка класса для хранения ваших данных звучит как чистый подход, поэтому я бы предложил это. Возможно, вы даже захотите создать класс, который будет хранить ваши конфиденциальные данные в зашифрованных полях, чтобы было еще сложнее получить конфиденциальную информацию, но это потребовало бы еще большей производительности.