wpf - 使用数据契约进行哈希表序列化时出现的问题

标签 wpf c#-3.0 xml-serialization

我正在尝试使用链接序列化哈希表

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/

相关文章:

wpf - 绑定(bind)组上的绑定(bind)表达式列表为空的解决方法

.net - 为什么要在 WPF 中使用 InkCanvas?

c# - WPF DataGrid - 数据绑定(bind)列到页面的 ViewModel

c# - 获取硬件信息

c# - 无法打开输入文件 : filename. php

c# - 为什么 C# 编译器不自动推断此代码中的类型?

c# - 使用 MVVM 在 XAML 中禁用 telerik 网格中的特定列

c# - 使用 XmlSerializer 添加不带前缀的命名空间

java - JAXB 编码器初始化

c# - 将数组反序列化为复杂对象