2012-05-10 7 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;   
} 

Estoy tratando de guardar KeyValuePair<K,V> en asp.net userprofile y también se guarda pero cuando estoy accediendo a él, muestra tanto la propiedad de clave como de valor nula, ¿alguien me puede decir dónde estoy equivocado?¿Podemos guardar KeyValuePair <K,V> en el perfil de usuario?

En LoadProfile() k y v son nulas.

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

Intentaré darle un nombre distinto a su propiedad, es decir, guardar y leer '[" _KV "]' o similar; no puedo imaginar por qué eso podría marcar la diferencia, pero podría ser para la serialización. – Rup

+0

No puedo reproducir esto en un nuevo proyecto MVC3 (es decir, funciona bien). ¿Puedes proporcionar un caso de prueba completo? De lo contrario, le recomendaría que verifique su flujo; quizás en el momento en que llame a LoadProfile(), no tenga ningún valor. – georgiosd

Respuesta

0

Trate de colocar [DataContract] y [DataMember] atributos en su clase y la propiedad KeyValuePair. Deberá agregar una referencia al System.Runtime.Serialization. Tenga en cuenta que también puede necesitar aplicar estos atributos en el nivel de la clase base para que la serialización funcione.

[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 's # KeyValuePair no tiene un regulador pública para la clave/valor atributos. Por lo tanto, puede serializar pero se deserializará vacío.

debe crear su propio pequeño implementación de la clase, por ejemplo:

[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; } 
} 

y luego usarlo en su ejemplo.

Cuestiones relacionadas