【问题标题】:Problem while hash table serialization using datacontract使用 datacontract 进行哈希表序列化时的问题
【发布时间】:2011-04-17 02:50:36
【问题描述】:

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

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.

谢谢

【问题讨论】:

    标签: wpf c#-3.0 xml-serialization


    【解决方案1】:

    您收到错误的原因是因为在该行中:

    SerializeToXmlAsFile(typeof(Hashtable), ht); 
    

    在您的 button1_Click 方法中,您正在传递类型 Hashtable。 DataContractSerializer 构造函数初始化自身以序列化您指定的类型的对象,在本例中为 Hashtable。因此,当您在调用时将 MyHashtable 类型的对象传递给它

    s.WriteObject(w, targetObject);
    

    它不知道如何处理它。要完成这项工作,您需要做的就是将行更改为:

    SerializeToXmlAsFile(typeof(MyHashtable), ht);
    

    【讨论】:

      【解决方案2】:

      我没有尝试运行我自己的代码,但它看起来像原始帖子中的错误:

             SerializeToXmlAsFile(typeof(Hashtable), ht);  
      

      上面的行如何工作? ht 是 MyHashtable 类型。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-03-12
        • 1970-01-01
        • 1970-01-01
        • 2011-06-28
        • 2013-04-17
        • 2011-05-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多