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>