gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 13:06:19 24 4
gpt4 key购买 nike

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

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; }
}

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 = new MyHashtable();

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

哪里SerializeToXmlAsFileMyHashtable输入您定义如下:

[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; }
}

此代码生成包含以下内容的 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 文件的元素的所有名称。

关于c#-3.0 - 哈希表的XML序列化(C#3.0),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2918187/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com