C# 3.0 哈希表的XML序列化(C#3.0)

C# 3.0 哈希表的XML序列化(C#3.0),c#-3.0,C# 3.0,嗨,我正在尝试序列化哈希表,但没有发生 private void Form1_Load(object sender, EventArgs e) { Hashtable ht = new Hashtable(); DateTime dt = DateTime.Now; for (int i = 0; i < 10; i++) ht.Add(dt.AddDa

嗨,我正在尝试序列化哈希表,但没有发生

private void Form1_Load(object sender, EventArgs e)
        {
            Hashtable ht = new Hashtable();        

            DateTime dt = DateTime.Now;
            for (int i = 0; i < 10; i++)
                ht.Add(dt.AddDays(i), i);           
            SerializeToXmlAsFile(typeof(Hashtable), ht);
        }

private void SerializeToXmlAsFile(Type targetType, Object targetObject)
        {
            try
            {
                string fileName = @"C:\output.xml";
                //Serialize to XML
                XmlSerializer s = new XmlSerializer(targetType);
                TextWriter w = new StreamWriter(fileName);
                s.Serialize(w, targetObject);
                w.Flush();
                w.Close();
            }
            catch (Exception ex) { throw ex; }
        }
private void Form1\u加载(对象发送方,事件参数e)
{
Hashtable ht=新的Hashtable();
DateTime dt=DateTime.Now;
对于(int i=0;i<10;i++)
ht.Add(dt.AddDays(i),i);
序列化mlasfile(typeof(Hashtable),ht);
}
私有void序列化Toxmlasfile(类型targetType,对象targetObject)
{
尝试
{
字符串文件名=@“C:\output.xml”;
//序列化为XML
XmlSerializer s=新的XmlSerializer(targetType);
TextWriter w=新的StreamWriter(文件名);
s、 序列化(w,targetObject);
w、 冲洗();
w、 Close();
}
catch(异常ex){throw ex;}
}
在谷歌搜索之后,我发现推动IDictonary的对象无法序列化。然而,我成功地实现了二进制序列化

但是我想要一个xml。有办法吗

我正在使用C#3.0


谢谢

您可以使用IXmlSerializable实现从standart Hashtable派生出自己的Hashtable。因此,您将实现ReadXml(XmlReader)和WriteXml(XmlWriter-writer),在这里,您可以将自己的逻辑放在如何使用给定的XmlReader和XmlWriter从哈希表中读取和写入值上。

我建议您使用DataContractSerializer,它更强大,更易于使用。

首先,从C#2.0开始,您可以使用.NET 1.0中非常古老的
哈希表的类型安全版本。所以你可以使用
字典

从.NET 3.0开始,您可以使用
DataContractSerializer
。所以你可以像下面这样重写你的代码

private void Form1_Load(object sender, EventArgs e)
    {
        MyHashtable ht = new MyHashtable();        

        DateTime dt = DateTime.Now;
        for (int i = 0; i < 10; i++)
            ht.Add(dt.AddDays(i), i);           
        SerializeToXmlAsFile(typeof(Hashtable), ht);
    }
此代码生成包含以下内容的C:\output.xml文件:

<?xml version="1.0" encoding="utf-8"?>
<AllMyHashtable xmlns:i="http://www.w3.org/2001/XMLSchema-instance"
 xmlns="http://schemas.datacontract.org/2004/07/DataContractXmlSerializer">
    <MyEntry>
        <MyDate>2010-06-09T22:30:00.9474539+02:00</MyDate>
        <MyValue>0</MyValue>
    </MyEntry>
    <MyEntry>
        <MyDate>2010-06-10T22:30:00.9474539+02:00</MyDate>
        <MyValue>1</MyValue>
    </MyEntry>
    <!-- ... -->
</AllMyHashtable>

2010-06-09T22:30:00.9474539+02:00
0
2010-06-10T22:30:00.9474539+02:00
1.
因此,我们可以如何查看我们可以自由定义的目标XML文件的元素的所有名称

<?xml version="1.0" encoding="utf-8"?>
<AllMyHashtable xmlns:i="http://www.w3.org/2001/XMLSchema-instance"
 xmlns="http://schemas.datacontract.org/2004/07/DataContractXmlSerializer">
    <MyEntry>
        <MyDate>2010-06-09T22:30:00.9474539+02:00</MyDate>
        <MyValue>0</MyValue>
    </MyEntry>
    <MyEntry>
        <MyDate>2010-06-10T22:30:00.9474539+02:00</MyDate>
        <MyValue>1</MyValue>
    </MyEntry>
    <!-- ... -->
</AllMyHashtable>