哈希表的XML序列化(C#3.0) [英] XML serialization of hash table(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.AddDays(i),i);
SerializeToXmlAsFile(typeof(Hashtable),ht);
}
私人无效SerializeToXmlAsFile(Type targetType,Object targetObject)
{
try
{
string fileName = @ C:\ \output.xml;
//序列化为XML
XmlSerializer s = new XmlSerializer(targetType);
TextWriter w =新的StreamWriter(fileName);
s.Serialize(w,targetObject);
w.Flush();
w.Close();
}
catch(异常例外){抛出异常; }
}
在Google搜索后,我发现无法对推动IDictonary的对象进行序列化。但是,我在二进制序列化方面取得了成功。
但是我想拥有一个xml。
我正在使用C#3.0
谢谢
首先从C#2.0开始,您可以使用非常旧的 Hashtable
的类型安全版本来自.NET 1.0。因此,您可以使用 Dictionary< DateTime,int>
。
从.NET 3.0开始,您可以使用 DataContractSerializer
。因此,您可以像下面这样重写代码
private void Form1_Load(object sender,EventArgs e)
{
MyHashtable ht =新的MyHashtable();
DateTime dt = DateTime.Now;
for(int i = 0; i< 10; i ++)
ht.Add(dt.AddDays(i),i);
SerializeToXmlAsFile(typeof(Hashtable),ht);
}
其中 SerializeToXmlAsFile
和您定义的 MyHashtable
类型如下:
[CollectionDataContract(Name = AllMyHashtable,ItemName = MyEntry,
KeyName = MyDate,ValueName = MyValue))]
公共类MyHashtable:Dictionary< DateTime,int> {}
private void SerializeToXmlAsFile(Type targetType,Object targetObject)
{
try {
string fileName = @ C:\output.xml;
DataContractSerializer s =新的DataContractSerializer(targetType);
XmlWriterSettings设置=新的XmlWriterSettings();
settings.Indent = true;
settings.IndentChars =();
使用(XmlWriter w = XmlWriter.Create(文件名,设置)){
s.WriteObject(w,targetObject);
w.Flush();
}
}
catch(异常例外){抛出异常; }
}
这段代码产生 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>
所以我们如何查看可以自由定义的目标XML文件元素的所有名称。 / p>
Hi I am trying to serialize a hash table but not happening
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; }
}
After a google search , I found that objects that impelment IDictonary cannot be serialized. However, I got success with binary serialization.
But I want to have xml one. Is there any way of doing so?
I am using C#3.0
Thanks
First of all starting with C# 2.0 you can use type safe version of very old Hashtable
which come from .NET 1.0. So you can use Dictionary<DateTime, int>
.
Starting with .NET 3.0 you can use DataContractSerializer
. So you can rewrite you code like following
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);
}
where SerializeToXmlAsFile
and MyHashtable
type you define like following:
[CollectionDataContract (Name = "AllMyHashtable", ItemName = "MyEntry",
KeyName = "MyDate", ValueName = "MyValue")]
public class MyHashtable : Dictionary<DateTime, int> { }
private void SerializeToXmlAsFile(Type targetType, Object targetObject)
{
try {
string fileName = @"C:\output.xml";
DataContractSerializer s = new DataContractSerializer (targetType);
XmlWriterSettings settings = new XmlWriterSettings ();
settings.Indent = true;
settings.IndentChars = (" ");
using (XmlWriter w = XmlWriter.Create (fileName, settings)) {
s.WriteObject (w, targetObject);
w.Flush ();
}
}
catch (Exception ex) { throw ex; }
}
This code produce C:\output.xml file with the following contain:
<?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>
So how we can see all names of the elements of the destination XML files we can free define.
这篇关于哈希表的XML序列化(C#3.0)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!