我正在尝试使用链接序列化哈希表
XML serialization of hash table(C#3.0)
但我收到的错误是
使用数据协定名称“AllMyHashtable:http://schemas.datacontract.org/2004/07/WpfApplication3”键入“WpfApplication3.MyHashtable” ' 不是预期的。将任何静态未知的类型添加到已知类型列表中 - 例如,通过使用 KnownTypeAttribute 属性或将它们添加到传递给 DataContractSerializer 的已知类型列表中。
我的程序如下
namespace WpfApplication3
{
/// <summary>
/// Interaction logic for Window1.xaml
/// </summary>
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
}
private void button1_Click(object sender, RoutedEventArgs 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);
}
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; }
}
}
[CollectionDataContract(Name = "AllMyHashtable", ItemName = "MyEntry",
KeyName = "MyDate", ValueName = "MyValue")]
public class MyHashtable : Dictionary<DateTime, int> { }
}
What wrong is hapenning ..please help.
谢谢
最佳答案
您收到错误的原因是因为在该行中:
SerializeToXmlAsFile(typeof(Hashtable), ht);
在您的 button1_Click 方法中,您正在传递类型 Hashtable。 DataContractSerializer 构造函数初始化自身以序列化您指定的类型的对象,在本例中为 Hashtable。因此,当您在调用时传递一个 MyHashtable 类型的对象时
s.WriteObject(w, targetObject);
它不知道如何处理它。完成这项工作所需要做的就是将行更改为:
SerializeToXmlAsFile(typeof(MyHashtable), ht);
关于wpf - 使用数据契约进行哈希表序列化时出现的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3792986/