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

私はKeyValuePair<K,V>asp.netユーザープロファイルに保存しようとしていますが、それも保存されますが、アクセスすると、キーと値の両方のプロパティがnullと表示されます。どこが間違っているか教えてもらえますか?

LoadProfile()k と v は null です。

Web.config

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

2 に答える 2

2

C#KeyValuePairには、キー/値属性のパブリック セッターがありません。したがって、シリアル化される可能性がありますが、空で逆シリアル化されます。

クラスの独自の小さな実装を作成する必要があります。次に例を示します。

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

そして、あなたの例でそれを使用してください。

于 2012-05-24T13:53:35.753 に答える
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; }
    }            
}
于 2012-05-11T18:27:08.453 に答える