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

मैं asp.net userprofile में KeyValuePair<K,V> को बचाने के लिए कोशिश कर रहा हूँ और यह भी बचाता है, बल्कि जब मैं उस तक पहुंचने में कर रहा हूँ, यह दोनों कुंजी और मान संपत्ति अशक्त दिखाने के लिए, कर सकते हैं किसी को भी मुझसे कहता है जहां मैं गलत हूँ?क्या हम उपयोगकर्ता प्रोफ़ाइल में KeyValuePair <K,V> सहेज सकते हैं?

LoadProfile() के और वी शून्य हैं।

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

मैं इसे अपनी संपत्ति से एक अलग नाम देने की कोशिश करता हूं, यानी '["_KV"] 'या इसी तरह से पढ़ना और पढ़ना - कल्पना नहीं कर सकता कि इससे कोई फर्क क्यों पड़ सकता है, लेकिन यह क्रमबद्धता के लिए हो सकता है। – Rup

+0

मैं इसे एक नई एमवीसी 3 परियोजना पर पुन: पेश नहीं कर सकता (यानी यह ठीक काम करता है)। क्या आप एक पूर्ण परीक्षण केस प्रदान कर सकते हैं? अन्यथा मैं अनुशंसा करता हूं कि आप अपना प्रवाह जांचें - शायद उस बिंदु पर जिसे आप लोडप्रोफाइल() कहते हैं, उसके पास कोई मान नहीं है। – georgiosd

उत्तर

0

अपने वर्ग और KeyValuePair संपत्ति पर [DataContract] और [DataMember] गुण रखने की कोशिश करें। आपको सिस्टम का संदर्भ जोड़ने की आवश्यकता होगी। रनटाइम। क्रमशः। ध्यान रखें कि काम करने के लिए क्रमिकरण के लिए आपको बेस क्लास स्तर पर इन विशेषताओं को भी लागू करने की आवश्यकता हो सकती है।

[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

सी # के KeyValuePair नहीं विशेषताओं की/मान के लिए एक सार्वजनिक सेटर है। तो यह serialize हो सकता है लेकिन यह खाली deserialize होगा।

आप कक्षा का अपना खुद का थोड़ा कार्यान्वयन बनाना होगा उदाहरण के लिए:

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

और फिर अपने उदाहरण में इसका इस्तेमाल करते हैं।