Utilizzare tipi complessi con le Profile API

di Cristian Civera, in ASP.NET 2.0,

Il Profile è uno strumento molto comodo per memorizzare facilmente informazioni specifiche dell'utente. A volte questi dati sono complessi e necessitano di logiche per il loro trattamento che trovano la migliore implementazione nella struttura che li racchiude.
In alternativa all'utilizzo della sezione che permette di raggruppare le proprietà in una semplice classe autogenerata, possiamo quindi ricorrere ad una classe personalizzata complessa.
Per farlo basta dichiare una proprietà e specificare il tipo nell'attributo type:

<profile enabled="true">
    <properties>
        <add name="ContactPlus" serializeAs="Xml" type="ASPItalia.com.Scripts.UserInfo"/>
    </properties>
</profile>

Definiamo poi la classe UserInfo nella cartella /App_Code/:

public class UserInfo
{
    private string _name;
    private string _surName;

    public string Name
    {
        get { return _name; }
        set { _name = value; }
    }

    public string Surname
    {
        get { return _surName; }
        set { _surName = value; }
    }

    // ... altra logica che tratta le proprietà definite
}

Il motore che gestisce il Profile, indipendentemente dal provider utilizzato per il salvataggio dei dati, trasforma le proprietà in funzione dell'attributo serializeAs.
Quando si usa un tipo complesso dobbiamo stare attenti al tipo di serializzazione che impostiamo. Se di tipo Xml il motore sfrutta XmlSerializer (il motore utilizzato anche nei WebServices) per raccogliere tutte le proprietà pubbliche e trasformarle in una rappresentazione XML. E' possibile intervenire tramite gli attributi o implementando l'interfaccia IXmlSerializable.
Quando la serializzazione è di tipo Binary il motore usa il BinaryFormatter (usato da remoting) ed è necessario marcare la classe con l'attributo Serializable. Inoltre è possibile controllare quali membri serializzare mediante attributi e implementando ISerializable.
Per ultimo se serializeAs è impostato su String il motore utilizza il TypeConverter associato al tipo per convertirlo in una stringa e viceversa. Questo è il caso più impegnativo, perché dobbiamo creare una classe che erediti da TypeConverter e che implementi la logica di conversione, per marcare poi la classe UserInfo con l'attributo TypeConverterAttribute.

L'allegato contiene l'implementazione di tutte e tre le casistiche.

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

I più letti di oggi