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