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

Tôi cố gắng tiết kiệm KeyValuePair<K,V> trong hồ sơ người dùng asp.net và nó cũng tiết kiệm nhưng khi tôi truy cập vào nó, nó hiển thị cả khóa và giá trị tài sản null, ai có thể cho tôi biết tôi đang sai ở đâu?Chúng tôi có thể lưu KeyValuePair <K,V> trong hồ sơ người dùng không?

Trong LoadProfile() k và v không có giá trị.

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

Tôi muốn đặt tên riêng biệt cho thuộc tính của bạn, tức là lưu và đọc '[" _KV "]' hoặc tương tự - không thể tưởng tượng tại sao điều đó có thể tạo sự khác biệt, nhưng có thể để tuần tự hóa. – Rup

+0

Tôi không thể sao chép điều này trên một dự án MVC3 mới (tức là nó hoạt động tốt). Bạn có thể cung cấp một trường hợp thử nghiệm hoàn chỉnh không? Nếu không, tôi sẽ khuyên bạn nên kiểm tra luồng của bạn - có lẽ tại thời điểm bạn đang gọi LoadProfile(), nó không có giá trị. – georgiosd

Trả lời

0

Hãy thử đặt [DataContract][DataMember] thuộc tính trên lớp học của bạn và tài sản KeyValuePair. Bạn sẽ cần phải thêm tham chiếu đến System.Runtime.Serialization. Hãy nhớ rằng bạn cũng có thể cần phải áp dụng các thuộc tính này ở cấp cơ sở để tuần tự hóa hoạt động.

[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 không phải là người đặt công khai cho thuộc tính khóa/giá trị. Vì vậy, nó có thể serialize nhưng nó sẽ deserialize sản phẩm nào.

Bạn phải tạo ít thực hiện của riêng bạn của lớp, ví dụ:

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

Và sau đó sử dụng nó trong ví dụ của bạn.