2012-05-10 10 views
9
[Serializable] 
public class KeyValue : ProfileBase 
{ 
    public KeyValue() { } 

    public KeyValuePair<string, string> KV 
    { 
     get { return (KeyValuePair<string, string>)base["KV"]; } 
     set { base["KV"] = value; } 
    }    
} 

public void SaveProfileData() 
{ 
    KeyValue profile = (KeyValue) HttpContext.Current.Profile; 
    profile.Name.Add(File); 
    profile.KV = new KeyValuePair<string, string>("key", "val"); 
    profile.Save(); 
} 

public void LoadProfile() 
{ 
    KeyValue profile = (KeyValue) HttpContext.Current.Profile; 
    string k = profile.KV.Key; 
    string v = profile.KV.Value; 
    Files = profile.Name;   
} 

Sto cercando di salvare KeyValuePair<K,V> in asp.net userprofile e salva anche, ma quando sto accedervi, esso esposizione sia nullo chiave e il valore della proprietà, Qualcuno mi dice dove sbaglio?Possiamo salvare KeyValuePair <K,V> nel profilo utente?

In LoadProfile() k e v sono nulli.

web.config

<profile enabled="true" inherits="SiteBuilder.Models.KeyValue"> 
    <providers> 
    <clear/> 
    <add name="AspNetSqlProfileProvider" type="System.Web.Profile.SqlProfileProvider" connectionStringName="ApplicationServices" applicationName="/" /> 
    </providers> 
</profile> 
+0

Vorrei provare a dargli un nome distinto dalla proprietà, ad esempio salvare e leggere '[" _KV "]' o simile - non riesco a immaginare perché questo potrebbe fare la differenza, ma potrebbe essere per la serializzazione. – Rup

+0

Non riesco a riprodurlo su un nuovo progetto MVC3 (cioè funziona bene). Puoi fornire un test case completo? Altrimenti ti consiglierei di controllare il tuo flusso - forse nel punto in cui stai chiamando LoadProfile(), non ha un valore. – georgiosd

risposta

0

Prova a mettere [DataContract] e [DataMember] attributi sulla tua classe e la proprietà KeyValuePair. Dovrai aggiungere un riferimento a System.Runtime.Serialization. Tenere presente che potrebbe anche essere necessario applicare questi attributi a livello di classe base affinché la serializzazione funzioni. s '

[DataContract] 
public class KeyValue : ProfileBase 
{ 
    public KeyValue() { } 

    [DataMember] 
    public KeyValuePair<string, string> KV 
    { 
     get { return (KeyValuePair<string, string>)base["KV"]; } 
     set { base["KV"] = value; } 
    }    
} 
2

C# KeyValuePair non ha un setter pubblico per la chiave/valore degli attributi. Quindi potrebbe serializzare ma deserializzerà vuoto.

È necessario creare il proprio piccolo implementazione della classe, ad esempio:

[Serializable] 
[DataContract] 
public class KeyValue<K,V> 
{ 
    /// <summary> 
    /// The Key 
    /// </summary> 
    [DataMember] 
    public K Key { get; set; } 

    /// <summary> 
    /// The Value 
    /// </summary> 
    [DataMember] 
    public V Value { get; set; } 
} 

e poi usarlo nel tuo esempio.

Problemi correlati