加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

wpf – 使用datacontract进行哈希表序列化时出现问题

发布时间:2020-12-16 06:54:52 所属栏目:百科 来源:网络整理
导读:我正在尝试使用链接序列化哈希表 XML serialization of hash table(C#3.0) 但我收到的错误是 不要求输入数据合同名称为“AllMyHashtable:http://schemas.datacontract.org/2004/07/WpfApplication3”的“WpfApplication3.MyHashtable”.将任何静态未知的类
我正在尝试使用链接序列化哈希表

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构造函数初始化自身以序列化您指定的Type对象,在本例中为Hashtable.因此,当您调用时,它传递一个MyHashtable类型的对象

s.WriteObject(w,targetObject);

它不知道如何处理它.您需要做的就是将此行更改为:

SerializeToXmlAsFile(typeof(MyHashtable),ht);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读