将Hashtable转换为xml字符串并返回HashTable而不使用.NET Serializer

时间:2011-06-01 14:26:26

标签: c# hashtable

有没有人知道如何在不使用基于.NET的XMLSerializer的情况下将Hashtable转换为XML String然后再转换回HashTable。当代码在IE内部运行并且打开浏览器的保护模式时,XMLSerializer会引起一些安全问题 -

所以基本上我正在寻找一种简单的方法将Hashtable转换为字符串并返回Hashtable。

非常感谢任何示例代码。

由于

2 个答案:

答案 0 :(得分: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);
        }
    }
}

答案 1 :(得分:1)

我没有时间对此进行测试,但请尝试:

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