2011-12-31 17 views
15

मैं हाल ही में सी # एप्लिकेशन सेटिंग्स से परिचित हो गया हूं, और यह अच्छा लगता है।
मैं कस्टम ऑब्जेक्ट्स की एक सूची स्टोर करने का एक तरीका खोज रहा था, लेकिन मुझे कोई रास्ता नहीं मिला!
असल में मैंने post to store int[] देखा, लेकिन यह इस समस्या के लिए सहायक नहीं था।
मैंने अपनी समस्या के लिए उपयुक्त बनाने के लिए उस समाधान की कॉन्फ़िगरेशन को बदलने की कोशिश की। इस बात का एक्सएमएल कॉन्फ़िग फ़ाइल था:एप्लिकेशन सेटिंग्स में ऑब्जेक्ट्स की सूची कैसे स्टोर करें

<Setting Name="SomeTestSetting" Type="System.Int32[]" Scope="User"> 
    <Value Profile="(Default)" /> 
</Setting> 

मैं के रूप में प्रकार विशेषता में नीचे उद्धृत लेकिन जब से यह मेरी वस्तु को पहचानने नहीं है कि यह सहायक नहीं था मेरी वस्तु संबोधित करने का प्रयास ... मैंने कोशिश की "प्रकार = सूची "और" प्रकार = "टपल []"
ये दोनों विकल्प मुझे मदद नहीं की

मैं एक वर्ग लगता है कि है:

class tuple 
    { 
     public tuple() 
     { 
      this.font = new Font ("Microsoft Sans Serif",8); 
      this.backgroundcolor_color = Color.White; 
      this.foregroundcolor_color = Color.Black; 
     } 
     public string log { get; set; } 
     public Font font { get ; set; } 
     public String fontName { get; set; } 
     public string foregroundcolor { get; set; } 
     public Color foregroundcolor_color { get; set; } 
     public string backgroundcolor { get; set; } 
     public Color backgroundcolor_color { get; set; } 
     public Boolean notification { get; set; } 
    } 

और मैं आवेदन में एक सूची संग्रहीत करना चाहते हैं सेटिंग
तो है इस उद्देश्य को प्राप्त करने का कोई तरीका है।
अग्रिम धन्यवाद।
चीयर्स,

+0

http://stackoverflow.com/questions/8627887/store-a-range-of-values-in-web-config-what-data-structure-to-use/8627974#8627974 – ivowiblo

+0

का संभावित डुप्लिकेट यहां देखें http://stackoverflow.com/questions/922047/store-dictionarystring-string-in-plication-settings यह आपकी मदद कर सकता है ... –

उत्तर

29

के रूप में बाइट सरणी को स्टोर करने के लिए बाइट सरणी और बेस 64 (काफी कुशल तरीके से) के रूप में tuples की सूची क्रमबद्ध करने के लिए आप BinaryFormatter का उपयोग कर सकते हैं।(संकेत: [SerializableAttribute]):

सबसे पहले ऐसा ही कुछ करने के लिए अपने वर्ग बदलने

[Serializable()] 
public class tuple 
{ 
    public tuple() 
    { 
     this.font = new Font("Microsoft Sans Serif", 8); 
    //.... 
} 

tuples और string के प्रकार के नाम पर रखा गया सेटिंग्स में संपत्ति जोड़ें।

void SaveTuples(List<tuple> tuples) 
{ 
    using (MemoryStream ms = new MemoryStream()) 
    { 
     BinaryFormatter bf = new BinaryFormatter(); 
     bf.Serialize(ms, tuples); 
     ms.Position = 0; 
     byte[] buffer = new byte[(int)ms.Length]; 
     ms.Read(buffer, 0, buffer.Length); 
     Properties.Settings.Default.tuples = Convert.ToBase64String(buffer); 
     Properties.Settings.Default.Save(); 
    } 
} 

List<tuple> LoadTuples() 
{ 
    using (MemoryStream ms = new MemoryStream(Convert.FromBase64String(Properties.Settings.Default.tuples))) 
    { 
     BinaryFormatter bf = new BinaryFormatter(); 
     return (List<tuple>)bf.Deserialize(ms); 
    } 
} 

उदाहरण::

tuples in Settings

तो फिर तुम लोड और (List<tuple>) tuples के सामान्य सूची को बचाने के लिए दो विधियों का उपयोग कर सकते

List<tuple> list = new List<tuple>(); 
list.Add(new tuple()); 
list.Add(new tuple()); 
list.Add(new tuple()); 
list.Add(new tuple()); 
list.Add(new tuple()); 

// save list 
SaveTuples(list); 

// load list 
list = LoadTuples(); 

मैं null छोड़ देते हैं, रिक्त स्ट्रिंग और अपवाद आपको जांच रहा है।

+0

मुझे आश्चर्य है कि यह डाउनवोट क्यों मिलता है, यह जानना अच्छा होगा कि क्या गलत है। –

+0

मुझे नहीं लगता कि 'SaveTuples' विधि में ** sr ** ('StreamReader') किसी भी उद्देश्य की सेवा करता है, इसलिए दूसरा उपयोग कथन सुरक्षित रूप से हटाया जा सकता है। –

+0

@ सेबएमिनी, आप सही हैं। ठीक किया गया :-)। –

0

मुझे यकीन नहीं है कि आप क्या करना चाहते हैं एप्लिकेशन सेटिंग्स में सबसे अच्छा किया जाता है। आप XDocument में क्या देखना चाहते हैं, और एक अलग कॉन्फ़िगरेशन फ़ाइल में आवश्यक मानों को संग्रहीत करना चाहते हैं।

+0

आपके समय और विचार के लिए धन्यवाद क्या आप मुझे XDocument के बारे में कुछ संकेत दे सकते हैं और यह क्या है? और एक अलग कॉन्फ़िगरेशन फ़ाइल में मानों को संग्रहीत करके आपका क्या मतलब था? – Ehsan

+0

एक्सडी दस्तावेज़ .NET के भीतर एक्सएमएल फाइलों में हेरफेर करने के लिए कक्षाओं में से एक है। http://msdn.microsoft.com/en-us/library/system.xml.linq.xdocument.aspx यदि आप वास्तव में पूरे स्टैक्चर को स्टोर करना चाहते हैं, तो एक्सएमएल सीरियलाइजेशन हालांकि आपकी बेहतर शर्त हो सकती है। – Hammerstein

0

आप .config फ़ाइलों को विस्तारित करने के लिए कस्टम प्रकार लिख सकते हैं। लेकिन यह पुष्टि के मौजूदा खंड में अपने स्वयं के मनमानी प्रकारों को संग्रहित नहीं करेगा बल्कि कस्टम अनुभाग जोड़ देगा।

एक कस्टम कॉन्फ़िगरेशन प्रकार, बच्चे नोड्स के लिए पूरी तरह से कस्टम तर्क प्रदान करके, XML क्रमबद्ध डेटा धारण कर सकता है। मैं तर्क दूंगा कि यह कॉन्फ़िगरेशन सिस्टम का दुरुपयोग कर रहा है: यह सेटिंग्स को पूरा करने के लिए राज्य को पूरा नहीं कर रहा है।

यदि आप यही चाहते हैं, तो ConfigurationSection के लिए प्रलेखन में एक साधारण उदाहरण है।

+0

आपके लिए प्रतिक्रिया के लिए धन्यवाद, लेकिन क्या आपके पास इस उद्देश्य को प्राप्त करने के लिए कोई सुझाव है? इस ऑब्जेक्ट को सहेजने और बाद में इसे पुनः प्राप्त करने के लिए? – Ehsan

+0

@Ehsan गुणों के सही सेट के साथ 'कॉन्फ़िगरेशनसेक्शन' के आधार पर एक कस्टम क्लास परिभाषित करें। कॉन्फ़िगरेशन लोड करने के लिए 'कॉन्फ़िगरेशन प्रबंधक' का उपयोग करें (उपयोगकर्ता स्तर सहित) और बाद में, सहेजें। – Richard

2

आवेदन कॉन्फ़िगरेशन को एप्लिकेशन रनटाइम पर डेटा संग्रहीत करने के लिए अच्छा विकल्प नहीं है। इस प्रयोग .NET क्रमबद्धता विकल्प में किसी भी उपलब्ध की तरह

और कई अन्य लोगों के लिए ..

संबंधित मुद्दे