Вы можете создать объект и сохранить его в профиле. Например:
[Serializable]
public class ProfileObject { }
[Serializable]
class StudentProfile : ProfileObject
{
public string Year {get;set;}
public string Name {get;set;}
public string Age {get;set;}
}
[Serializable]
class TeacherProfile : ProfileObject
{
public string Department {get;set;}
public string Tenure {get;set;}
public string Rating {get;set;}
}
В веб.конфигурации:
<profile>
...
<properties>
<add name="UserProfile" allowAnonymous="false" type="ProfileObject" serializeAs="Xml"/>
</properties>
</profile>
Редактировать: я не могу вспомнить, можете ли вы использовать интерфейс в качестве типа или нет. Изменил его на объект.
Доступ к этому через Profile.UserProfile (избыточно, но работает). Затем, чтобы обработать это, вам нужно будет проверить тип:
if(Profile.UserProfile is StudentProfile) { /* do something */ } else
if(Profile.UserProfile is TeacherProfile) { /* do something */ } // etc.
Вы также можете хранить дженерики в объекте профиля (возможно, словарь? Ниже приведена реализация, которую я использовал)
Например:
namespace Model
{
[Serializable]
public class RecentlyViewed : List<Model.Product>
{
public RecentlyViewed() {}
}
}
И в web.config:
<profile>
...
<properties>
<add name="RecentlyViewed" allowAnonymous="false" type="Model.RecentlyViewed" serializeAs="Xml"/>
</properties>
</profile>
Я использовал этот метод в .NET 3.5, я не уверен, работает ли он в .NET 2 или 3. Я предполагаю, что дженерики обрабатываются одинаково, поскольку компилятор не изменился.
Примечание. Необходимо наследовать универсальный объект в пустой объект, потому что настройкам профиля не нравится следующее:
<profile>
...
<properties>
<add name="RecentlyViewed" allowAnonymous="false" type="System.Collections.Generic.List`1[Model.Product]" serializeAs="Xml"/>
</properties>
</profile>
Выше приведено полное имя IL, как оно должно выглядеть. Кажется, что XML не нравится галочка.
Я не исследовал никаких проблем с производительностью при хранении сериализованных объектов в объекте Profile, и поэтому я бы не рекомендовал это для каких-либо свойств, которые вам понадобятся на довольно регулярной основе.
person
Jim Schubert
schedule
17.03.2010