オブジェクトを作成して、それをプロファイルに保存できます。例えば:
[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;}
}
web.configの場合:
<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>
このメソッドを.NET3.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オブジェクトに格納する際のパフォーマンスの問題については調査していません。したがって、かなり定期的に必要になるプロパティには、これをお勧めしません。