我们可以在用户配置文件中保存KeyValuePair <k,v>吗?</k,v>

时间:2012-05-10 12:46:11

标签: c# .net asp.net-mvc-3 asp.net-profiles

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

我正在尝试将KeyValuePair<K,V>保存在asp.net userprofile中并保存,但是当我访问它时,它会显示key和value属性为null,有人能告诉我我错在哪里吗?

LoadProfile()中,k和v为空。

的Web.config

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

2 个答案:

答案 0 :(得分:2)

C#的KeyValuePair没有Key / Value属性的公共设置器。所以它可能会序列化,但它会反序列化为空。

您必须创建自己的类的小实现,例如:

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

然后在你的例子中使用它。

答案 1 :(得分:0)

尝试在您的类和KeyValuePair属性上放置 [DataContract] [DataMember] 属性。您需要添加对 System.Runtime.Serialization 的引用。请记住,您可能还需要在基类级别应用这些属性才能使序列化工作。

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

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