10. september 2006 - 00:01
Der er
13 kommentarer og 1 løsning
gemme og hente key value i en streng
Findes der en klasse som er velegnet til både at håndtere key/values, og som samtidig kan gemme hente og gemme i en streng. ArrayList er for eksempel velegnet til key/value: eks. ArrayList al = new ArrayList(); al.Add("myKey", "myVal"); Men jeg ønsker mulighed for at gemme og hente i en streng som jeg kan opbevare i en celle i en database.
Annonceindlæg fra Computerworld it-jobbank
Mød 3.500+ it-talenter på IT-DAY 2026
Hos Computerworld it-jobbank er vi stolte af at fortsætte det gode partnerskab med folkene bag IT-DAY – efter vores mening Danmarks bedste karrieremesse for unge og erfarne it-kandidater.
10. september 2006 - 00:37
#1
Kan du ikke bruge noget XML serialization?
10. september 2006 - 01:16
#2
Du mener Hashtable/Dictionary ikke ?? XML var ihvertfald en oplagt mulighed - om det så lige skal være XmlSerializer elle rnoget andet kan diskuteres
10. september 2006 - 10:33
#3
Jo det har jeg også overvejet, men der skal man selv skrive en del kode for at serialize og deserialize. Dertil kommer at XmlSerializer ikke virker på HashTables
(
http://blogs.msdn.com/psheill/archive/2005/04/09/406823.aspx )
Findes der ikke en klasse som nemt kan håndtere key/values, og som selv kan outputte dem til en streng. Og læse sine key/values fra en streng, evt. i konstruktøren.
10. september 2006 - 16:42
#4
det er meget nemt selv at lave en serialisering til/deserialisering fra XML af en Hashtable jeg kender ikke en indbygget klasse i .NET som gør det du efterspørger
11. september 2006 - 12:45
#5
Kan du henvise til et kodeeksempel, hvor der serializes til/fra xml af en HashTable. Så er point dine
11. september 2006 - 12:59
#6
jeg kan lave et eksempel
11. september 2006 - 13:18
#7
et hurtigt stykke kode using System; using System.Collections; using System.Xml; namespace E { public class MainClass { public static string Hashtable2String(Hashtable ht) { XmlDocument doc = new XmlDocument(); doc.AppendChild(doc.CreateElement("all")); foreach(DictionaryEntry de in ht) { XmlElement e = doc.CreateElement("entry"); XmlElement k = doc.CreateElement("key"); XmlElement v = doc.CreateElement("value"); k.AppendChild(doc.CreateTextNode((string)de.Key)); v.AppendChild(doc.CreateTextNode((string)de.Value)); e.AppendChild(k); e.AppendChild(v); doc.DocumentElement.AppendChild(e); } return doc.OuterXml; } public static Hashtable String2Hashtable(string s) { Hashtable res = new Hashtable(); XmlDocument doc = new XmlDocument(); doc.LoadXml(s); XmlNodeList all = doc.GetElementsByTagName("entry"); foreach(XmlElement e in all) { string k = e.ChildNodes[0].FirstChild.Value; string v = e.ChildNodes[1].FirstChild.Value; res.Add(k, v); } return res; } public static void Main(string[] args) { Hashtable ht = new Hashtable(); ht.Add("key1", "val1"); ht.Add("key2", "val2"); ht.Add("key3", "val3"); string s = Hashtable2String(ht); Console.WriteLine(s); Hashtable ht2 = String2Hashtable(s); Console.WriteLine(ht2["key1"]); Console.WriteLine(ht2["key2"]); Console.WriteLine(ht2["key3"]); } } } det forudsætter at Hashtable mapper fra string til string
13. september 2006 - 21:55
#8
Tak, det var meget fornemt. smid svar så får du point.
13. september 2006 - 22:55
#9
svar
13. september 2006 - 22:55
#10
<, > og & skal vist iøvrigt escapes for at den er sikker
14. september 2006 - 10:55
#11
Tænker du på at Escape således at k.AppendChild(doc.CreateTextNode((string)de.Key)); erstattes af: String KeyString = ((string)de.Key); KeyString = KeyString.Replace("<","\<"); KeyString = KeyString.Replace(">","\>"); KeyString = KeyString.Replace("&","\&"); k.AppendChild(doc.CreateTextNodeKeyString);
14. september 2006 - 10:57
#12
... glemte lige parenteserne, skulle se således ud: String KeyString = ((string)de.Key); KeyString = KeyString.Replace("<","\<"); KeyString = KeyString.Replace(">","\>"); KeyString = KeyString.Replace("&","\&"); k.AppendChild(doc.CreateTextNode(KeyString));
15. september 2006 - 00:10
#13
ved nærmere eftertanke tror jeg faktisk at de bliver escapet automatisk af .NET, så glem det
15. september 2006 - 00:11
#14
ellers er det iøvrigt: > < &
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.