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); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |