2011-06-01 38 views
5

有誰知道如何將Hashtable轉換爲XML String,然後返回HashTable而不使用基於.NET的XMLSerializer。當代碼運行在IE內部並且瀏覽器的保護模式打開時,XMLSerializer帶來了一些安全問題 -將Hashtable轉換爲xml字符串並返回HashTable而不使用.NET Serializer

所以基本上我正在尋找一種簡單的方法將該Hashtable轉換爲字符串並返回到Hashtable。

任何示例代碼將不勝感激。

感謝

回答

5

您可以使用DataContractSerializer類:

using System; 
using System.Collections; 
using System.IO; 
using System.Runtime.Serialization; 
using System.Text; 
using System.Xml; 

public class MyClass 
{ 
    public string Foo { get; set; } 
    public string Bar { get; set; } 
} 

class Program 
{ 
    static void Main() 
    { 
     var table = new Hashtable 
     { 
      { "obj1", new MyClass { Foo = "foo", Bar = "bar" } }, 
      { "obj2", new MyClass { Foo = "baz" } }, 
     }; 

     var sb = new StringBuilder(); 
     var serializer = new DataContractSerializer(typeof(Hashtable), new[] { typeof(MyClass) }); 
     using (var writer = new StringWriter(sb)) 
     using (var xmlWriter = XmlWriter.Create(writer)) 
     { 
      serializer.WriteObject(xmlWriter, table); 
     } 

     Console.WriteLine(sb); 

     using (var reader = new StringReader(sb.ToString())) 
     using (var xmlReader = XmlReader.Create(reader)) 
     { 
      table = (Hashtable)serializer.ReadObject(xmlReader); 
     } 
    } 
} 
+0

,將工作是 - 謝謝你 – 2011-06-01 14:42:03

1

我沒有時間來測試這一點,但嘗試:

XDocument doc = new XDocument("HashTable", 
           from de in hashTable 
           select new XElement("Item", 
                new XAttribute("key", de.Key), 
                new XAttribute("value", de.Value))); 
+0

找不到源類型爲'System.Collections.Hashtable'的查詢模式的實現 – AMH 2012-10-21 08:17:43

+0

它不起作用,因爲hastable沒有實現ienumerator來執行LINQ 反對 – AMH 2012-10-21 09:46:43